geoblacklight_admin 0.6.3 → 0.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +2 -1
- data/app/assets/stylesheets/geoblacklight_admin/_core.scss +2 -1
- data/app/assets/stylesheets/geoblacklight_admin/modules/_icons.scss +9 -0
- data/app/assets/stylesheets/geoblacklight_admin/modules/_pagy.scss +7 -0
- data/app/controllers/admin/document_data_dictionaries_controller.rb +126 -0
- data/app/controllers/admin/document_data_dictionary_entries_controller.rb +124 -0
- data/app/controllers/admin/document_distributions_controller.rb +0 -38
- data/app/controllers/admin/import_distributions_controller.rb +126 -0
- data/app/controllers/concerns/blacklight/catalog.rb +373 -0
- data/app/helpers/facets_helper.rb +19 -0
- data/app/javascript/index.js +1 -1
- data/app/jobs/import_distributions_run_job.rb +32 -0
- data/app/jobs/import_document_distribution_job.rb +23 -0
- data/app/models/document.rb +5 -0
- data/app/models/document_data_dictionary/csv_header_validator.rb +30 -0
- data/app/models/document_data_dictionary.rb +39 -0
- data/app/models/document_data_dictionary_entry.rb +9 -0
- data/app/models/import_distribution/csv_header_validator.rb +32 -0
- data/app/models/import_distribution.rb +55 -0
- data/app/models/import_distribution_state_machine.rb +14 -0
- data/app/models/import_distribution_transition.rb +26 -0
- data/app/models/import_document_distribution.rb +25 -0
- data/app/models/import_document_distribution_state_machine.rb +13 -0
- data/app/models/import_document_distribution_transition.rb +19 -0
- data/app/views/admin/document_data_dictionaries/_data_dictionaries_table.html.erb +40 -0
- data/app/views/admin/document_data_dictionaries/_document_data_dictionary.html.erb +37 -0
- data/app/views/admin/document_data_dictionaries/_document_data_dictionary.json.jbuilder +2 -0
- data/app/views/admin/document_data_dictionaries/_form.html.erb +17 -0
- data/app/views/admin/document_data_dictionaries/edit.html.erb +12 -0
- data/app/views/admin/document_data_dictionaries/index.html.erb +45 -0
- data/app/views/admin/document_data_dictionaries/index.json.jbuilder +1 -0
- data/app/views/admin/document_data_dictionaries/new.html.erb +78 -0
- data/app/views/admin/document_data_dictionaries/show.html.erb +78 -0
- data/app/views/admin/document_data_dictionaries/show.json.jbuilder +1 -0
- data/app/views/admin/document_data_dictionary_entries/_form.html.erb +19 -0
- data/app/views/admin/document_data_dictionary_entries/edit.html.erb +12 -0
- data/app/views/admin/document_data_dictionary_entries/new.html.erb +16 -0
- data/app/views/admin/document_distributions/index.html.erb +2 -2
- data/app/views/admin/documents/_form_nav.html.erb +4 -0
- data/app/views/admin/import_distributions/_form.html.erb +21 -0
- data/app/views/admin/import_distributions/_import_distribution.json.jbuilder +5 -0
- data/app/views/admin/import_distributions/_show_failed_tab.html.erb +36 -0
- data/app/views/admin/import_distributions/_show_success_tab.html.erb +35 -0
- data/app/views/admin/import_distributions/edit.html.erb +8 -0
- data/app/views/admin/import_distributions/index.html.erb +58 -0
- data/app/views/admin/import_distributions/index.json.jbuilder +3 -0
- data/app/views/admin/import_distributions/new.html.erb +7 -0
- data/app/views/admin/import_distributions/show.html.erb +121 -0
- data/app/views/admin/import_distributions/show.json.jbuilder +3 -0
- data/app/views/admin/imports/index.html.erb +2 -2
- data/app/views/admin/shared/_navbar.html.erb +2 -2
- data/app/views/catalog/_facet_pagination.html.erb +6 -0
- data/app/views/catalog/_gbl_admin_data_dictionaries.html.erb +3 -0
- data/app/views/catalog/_paginate_compact.html.erb +9 -0
- data/app/views/catalog/_results_pagination.html.erb +9 -0
- data/app/views/catalog/_show_gbl_admin_data_dictionaries.html.erb +44 -0
- data/app/views/catalog/data_dictionaries.html.erb +12 -0
- data/db/migrate/20241204163117_create_document_data_dictionaries.rb +14 -0
- data/db/migrate/20241218174455_create_document_data_dictionary_entries.rb +17 -0
- data/db/migrate/20250113213655_import_distributions.rb +56 -0
- data/lib/generators/geoblacklight_admin/config_generator.rb +61 -4
- data/lib/generators/geoblacklight_admin/templates/btaa_sample_document_data_dictionary_entries.csv +9 -0
- data/lib/generators/geoblacklight_admin/templates/btaa_sample_document_distributions.csv +17 -0
- data/lib/generators/geoblacklight_admin/templates/config/initializers/pagy.rb +53 -83
- data/lib/geoblacklight_admin/engine.rb +1 -0
- data/lib/geoblacklight_admin/routes/data_dictionariesable.rb +17 -0
- data/lib/geoblacklight_admin/version.rb +1 -1
- metadata +61 -14
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# ImportDocumentDistribution class
|
4
|
+
class ImportDocumentDistribution < ApplicationRecord
|
5
|
+
has_many :import_document_distribution_transitions, autosave: false, dependent: :destroy
|
6
|
+
|
7
|
+
include Statesman::Adapters::ActiveRecordQueries[
|
8
|
+
transition_class: ImportDocumentDistributionTransition,
|
9
|
+
initial_state: :queued
|
10
|
+
]
|
11
|
+
|
12
|
+
def state_machine
|
13
|
+
@state_machine ||= ImportDocumentDistributionStateMachine.new(self, transition_class: ImportDocumentDistributionTransition)
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_hash
|
17
|
+
{
|
18
|
+
friendlier_id: friendlier_id,
|
19
|
+
reference_type: ReferenceType.find_by(name: reference_type),
|
20
|
+
url: distribution_url,
|
21
|
+
label: label,
|
22
|
+
import_distribution_id: import_distribution_id
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# ImportDocumentDistribution Statesman
|
4
|
+
class ImportDocumentDistributionStateMachine
|
5
|
+
include Statesman::Machine
|
6
|
+
|
7
|
+
state :queued, initial: true
|
8
|
+
state :success
|
9
|
+
state :failed
|
10
|
+
|
11
|
+
transition from: :queued, to: %i[success failed]
|
12
|
+
transition from: :failed, to: :success
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Add ImportDocumentDistribution Statesman Transitions
|
4
|
+
class ImportDocumentDistributionTransition < ApplicationRecord
|
5
|
+
include Statesman::Adapters::ActiveRecordTransition
|
6
|
+
|
7
|
+
belongs_to :import_document_distribution, inverse_of: :import_document_distribution_transitions
|
8
|
+
|
9
|
+
after_destroy :update_most_recent, if: :most_recent?
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def update_most_recent
|
14
|
+
last_transition = import_document_distribution.import_document_distribution_transitions.order(:sort_key).last
|
15
|
+
return if last_transition.blank?
|
16
|
+
|
17
|
+
last_transition.update_column(:most_recent, true)
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<div class="table-responsive">
|
2
|
+
<table class="table table-striped table-bordered sortable">
|
3
|
+
<thead class="thead-dark">
|
4
|
+
<tr>
|
5
|
+
<th>Name</th>
|
6
|
+
<th>Description</th>
|
7
|
+
<th>Staff Notes</th>
|
8
|
+
<th>Tags</th>
|
9
|
+
<th>Entries</th>
|
10
|
+
<th colspan="2">Actions</th>
|
11
|
+
</tr>
|
12
|
+
</thead>
|
13
|
+
<tbody>
|
14
|
+
<% document_data_dictionaries.each do |document_data_dictionary| %>
|
15
|
+
<tr>
|
16
|
+
<td><%= link_to(document_data_dictionary.name, admin_document_document_data_dictionary_path(document_data_dictionary.friendlier_id, document_data_dictionary)) %></td>
|
17
|
+
<td>
|
18
|
+
<%= document_data_dictionary.description %>
|
19
|
+
<span class="sr-only"><%= document_data_dictionary.inspect %></span>
|
20
|
+
</td>
|
21
|
+
<td>
|
22
|
+
<%= document_data_dictionary.staff_notes %>
|
23
|
+
</td>
|
24
|
+
<td>
|
25
|
+
<%= document_data_dictionary.tags %>
|
26
|
+
</td>
|
27
|
+
<td>
|
28
|
+
<%= link_to "#{document_data_dictionary.document_data_dictionary_entries.count} entries", admin_document_document_data_dictionary_path(document_data_dictionary.friendlier_id, document_data_dictionary) %>
|
29
|
+
</td>
|
30
|
+
<td>
|
31
|
+
<%= link_to 'Edit', edit_admin_document_document_data_dictionary_path(document_data_dictionary.friendlier_id, document_data_dictionary) %>
|
32
|
+
</td>
|
33
|
+
<td>
|
34
|
+
<%= link_to 'Destroy', admin_document_document_data_dictionary_path(document_data_dictionary.friendlier_id, document_data_dictionary), method: :delete, data: { confirm: 'Are you sure?' } %>
|
35
|
+
</td>
|
36
|
+
</tr>
|
37
|
+
<% end %>
|
38
|
+
</tbody>
|
39
|
+
</table>
|
40
|
+
</div>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<%- @page_title = "GBL♦Admin - Document - Data Dictionaries" %>
|
2
|
+
|
3
|
+
<div id="<%= dom_id document_data_dictionary %>">
|
4
|
+
<h2>
|
5
|
+
<%= document_data_dictionary.name %>
|
6
|
+
<%= link_to '~ Edit Data Dictionary', edit_admin_document_document_data_dictionary_path, { class: 'btn btn-primary float-right' } %>
|
7
|
+
</h2>
|
8
|
+
|
9
|
+
<table class="table table-bordered">
|
10
|
+
<thead class="thead-dark">
|
11
|
+
<tr>
|
12
|
+
<th class="header" style="width:300px;">Attribute</th>
|
13
|
+
<th class="header">Value</th>
|
14
|
+
</tr>
|
15
|
+
</thead>
|
16
|
+
<tr>
|
17
|
+
<th>Friendlier Id</th>
|
18
|
+
<td><%= document_data_dictionary.friendlier_id %></td>
|
19
|
+
</tr>
|
20
|
+
<tr>
|
21
|
+
<th>Name</th>
|
22
|
+
<td><%= document_data_dictionary.name %></td>
|
23
|
+
</tr>
|
24
|
+
<tr>
|
25
|
+
<th>Description</th>
|
26
|
+
<td><%= document_data_dictionary.description %></td>
|
27
|
+
</tr>
|
28
|
+
<tr>
|
29
|
+
<th>Staff Notes</th>
|
30
|
+
<td><%= document_data_dictionary.staff_notes %></td>
|
31
|
+
</tr>
|
32
|
+
<tr>
|
33
|
+
<th>Tags</th>
|
34
|
+
<td><%= document_data_dictionary.tags %></td>
|
35
|
+
</tr>
|
36
|
+
</table>
|
37
|
+
</div>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<%= simple_form_for([:admin, @document, @document_data_dictionary]) do |f| %>
|
2
|
+
<%= f.error_notification %>
|
3
|
+
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
|
4
|
+
|
5
|
+
<div class="form-inputs">
|
6
|
+
<%= f.input :friendlier_id, input_html: { value: @document.friendlier_id, readonly: true } %>
|
7
|
+
<%= f.input :name, input_html: { class: 'form-control', autofocus: true } %>
|
8
|
+
<%= f.input :description, input_html: { class: 'form-control' } %>
|
9
|
+
<%= f.input :staff_notes, input_html: { class: 'form-control' } %>
|
10
|
+
<%= f.input :tags, input_html: { class: "form-control mb-2", placeholder: "Comma-separated tags (Optional)", data: { controller: "taginput" } } %>
|
11
|
+
<%= f.file_field :csv_file, direct_upload: true %>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<div class="form-group mt-3">
|
15
|
+
<%= f.submit class: 'btn btn-primary' %>
|
16
|
+
</div>
|
17
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% content_for :title, "Editing document data dictionary" %>
|
2
|
+
|
3
|
+
<h1>Editing document data dictionary</h1>
|
4
|
+
|
5
|
+
<%= render "form", document_data_dictionary: @document_data_dictionary %>
|
6
|
+
|
7
|
+
<br>
|
8
|
+
|
9
|
+
<div>
|
10
|
+
<%= link_to "Show this document data dictionary", admin_document_document_data_dictionary_path(@document, @document_data_dictionary) %> |
|
11
|
+
<%= link_to "Back to document data dictionaries", admin_document_document_data_dictionaries_path(@document) %>
|
12
|
+
</div>
|
@@ -0,0 +1,45 @@
|
|
1
|
+
<%- @page_title = "GBL♦Admin - Document - Data Dictionaries" %>
|
2
|
+
|
3
|
+
<div class="row mb-2">
|
4
|
+
<div class="col">
|
5
|
+
<h1 style="width:100%;">
|
6
|
+
Document · Data Dictionaries
|
7
|
+
|
8
|
+
<%= link_to '+ New Data Dictionary', new_admin_document_document_data_dictionary_path, { class: 'btn btn-primary float-right' } %>
|
9
|
+
</h1>
|
10
|
+
<% if params[:document_id] %>
|
11
|
+
<h2 class='h3'>
|
12
|
+
<%= link_to(@document.title, admin_document_path(@document)) %>
|
13
|
+
·
|
14
|
+
<%= @document_data_dictionaries.count %> data dictionaries
|
15
|
+
</h2>
|
16
|
+
<% else %>
|
17
|
+
<h2 class='h3'>Data Dictionaries</h2>
|
18
|
+
<% end %>
|
19
|
+
|
20
|
+
<% if @pagy %>
|
21
|
+
<h6>
|
22
|
+
<span class='float-left mt-3'>
|
23
|
+
<%== pagy_info(@pagy, 'data dictionaries'.pluralize(@pagy.count)) %>
|
24
|
+
</span>
|
25
|
+
<span class='float-right'>
|
26
|
+
<%== pagy_bootstrap_nav(@pagy) %>
|
27
|
+
</span>
|
28
|
+
</h6>
|
29
|
+
<% end %>
|
30
|
+
|
31
|
+
<%= render partial: 'data_dictionaries_table', locals: { document_data_dictionaries: @document_data_dictionaries } %>
|
32
|
+
|
33
|
+
<% if @pagy %>
|
34
|
+
<h6>
|
35
|
+
<span class='float-left mt-3'>
|
36
|
+
<%== pagy_info(@pagy, 'data dictionaries'.pluralize(@pagy.count)) %>
|
37
|
+
</span>
|
38
|
+
<span class='float-right'>
|
39
|
+
<%== pagy_bootstrap_nav(@pagy) %>
|
40
|
+
</span>
|
41
|
+
</h6>
|
42
|
+
<% end %>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.array! @document_data_dictionaries, partial: "document_data_dictionaries/document_data_dictionary", as: :document_data_dictionary
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<div class="row mb-2">
|
2
|
+
<div class="col">
|
3
|
+
<%= link_to "Back to document data dictionaries", admin_document_document_data_dictionaries_path(@document) %>
|
4
|
+
|
5
|
+
<h1 style="width:100%;">
|
6
|
+
<%= @document.title %> · New Data Dictionary
|
7
|
+
</h1>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<div class="row">
|
12
|
+
<div class="col-5">
|
13
|
+
<%= render "form", document_data_dictionary: @document_data_dictionary %>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<div class="col-6">
|
17
|
+
<h4>Example Data Dictionary CSV File</h4>
|
18
|
+
<table class="table table-bordered">
|
19
|
+
<thead>
|
20
|
+
<tr>
|
21
|
+
<th>friendlier_id*</th>
|
22
|
+
<th>field_name*</th>
|
23
|
+
<th>field_type</th>
|
24
|
+
<th>values</th>
|
25
|
+
<th>definition</th>
|
26
|
+
<th>definition_source</th>
|
27
|
+
<th>parent_field_name</th>
|
28
|
+
</tr>
|
29
|
+
</thead>
|
30
|
+
<tbody>
|
31
|
+
<tr>
|
32
|
+
<td>999-0010a</td>
|
33
|
+
<td>Institution</td>
|
34
|
+
<td>string</td>
|
35
|
+
<td>University of Minnesota</td>
|
36
|
+
<td>The name of the institution</td>
|
37
|
+
<td>https://www.umn.edu</td>
|
38
|
+
<td>999-0010UMN</td>
|
39
|
+
</tr>
|
40
|
+
<tr>
|
41
|
+
<td>999-0010a</td>
|
42
|
+
<td>Institution</td>
|
43
|
+
<td>string</td>
|
44
|
+
<td>University of Minnesota Duluth</td>
|
45
|
+
<td>The name of the institution</td>
|
46
|
+
<td>https://www.d.umn.edu</td>
|
47
|
+
<td>999-0010UMN</td>
|
48
|
+
</tr>
|
49
|
+
<tr>
|
50
|
+
<td>...</td>
|
51
|
+
<td>...</td>
|
52
|
+
<td>...</td>
|
53
|
+
<td>...</td>
|
54
|
+
<td>...</td>
|
55
|
+
<td>...</td>
|
56
|
+
</tr>
|
57
|
+
</tbody>
|
58
|
+
</table>
|
59
|
+
|
60
|
+
<h5>CSV File Column Definitions</h5>
|
61
|
+
<dl>
|
62
|
+
<dt>friendlier_id</dt>
|
63
|
+
<dd>The associated document's friendlier id</dd>
|
64
|
+
<dt>field_name</dt>
|
65
|
+
<dd>The name of the field</dd>
|
66
|
+
<dt>field_type</dt>
|
67
|
+
<dd>The type of the field</dd>
|
68
|
+
<dt>values</dt>
|
69
|
+
<dd>The values of the field</dd>
|
70
|
+
<dt>definition</dt>
|
71
|
+
<dd>The definition of the field</dd>
|
72
|
+
<dt>definition_source</dt>
|
73
|
+
<dd>The source of the definition</dd>
|
74
|
+
<dt>parent_field_name</dt>
|
75
|
+
<dd>The parent field's name</dd>
|
76
|
+
</dl>
|
77
|
+
</div>
|
78
|
+
</div>
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<%- @page_title = "GBL♦Admin - Document - Data Dictionaries" %>
|
2
|
+
|
3
|
+
<div class="row mb-2">
|
4
|
+
<div class="col">
|
5
|
+
<%= link_to "Back to document data dictionaries", admin_document_document_data_dictionaries_path(@document) %>
|
6
|
+
|
7
|
+
<h1 style="width:100%;">
|
8
|
+
<%= @document.title %> · Data Dictionaries · <%= @document_data_dictionary.name %>
|
9
|
+
|
10
|
+
<%= link_to '+ New Entry', new_admin_document_document_data_dictionary_document_data_dictionary_entry_path(@document, @document_data_dictionary), { class: 'btn btn-primary float-right' } %>
|
11
|
+
</h1>
|
12
|
+
</div>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div class="row">
|
16
|
+
<div class="col-12">
|
17
|
+
<h6>
|
18
|
+
<span class='float-left mt-3'>
|
19
|
+
<%== pagy_info(@pagy) %>
|
20
|
+
</span>
|
21
|
+
<span class='float-right'>
|
22
|
+
<%== pagy_bootstrap_nav(@pagy) %>
|
23
|
+
</span>
|
24
|
+
</h6>
|
25
|
+
|
26
|
+
<div class="table-responsive">
|
27
|
+
<table class="table table-striped table-bordered sortable">
|
28
|
+
<thead class="thead-dark">
|
29
|
+
<tr>
|
30
|
+
<th class="header">field_name</th>
|
31
|
+
<th class="header">field_type</th>
|
32
|
+
<th class="header">values</th>
|
33
|
+
<th class="header">definition</th>
|
34
|
+
<th class="header">definition_source</th>
|
35
|
+
<th class="header">parent_field_name</th>
|
36
|
+
<th class="header">Reorder</th>
|
37
|
+
<th class="header" colspan="2">Actions</th>
|
38
|
+
</tr>
|
39
|
+
</thead>
|
40
|
+
<tbody>
|
41
|
+
<% @document_data_dictionary.document_data_dictionary_entries.each do |entry| %>
|
42
|
+
<tr data-id="<%=entry.id%>">
|
43
|
+
<td><%= entry.field_name %></td>
|
44
|
+
<td><%= entry.field_type %></td>
|
45
|
+
<td><%= entry.values %></td>
|
46
|
+
<td><%= entry.definition %></td>
|
47
|
+
<td><%= entry.definition_source %></td>
|
48
|
+
<td><%= entry.parent_field_name %></td>
|
49
|
+
<td class="handle" style="text-align:center">↕</td>
|
50
|
+
<td>
|
51
|
+
<%= link_to 'Edit', edit_admin_document_document_data_dictionary_document_data_dictionary_entry_path(@document, @document_data_dictionary, entry.id) %>
|
52
|
+
</td>
|
53
|
+
<td>
|
54
|
+
<%= link_to 'Destroy', admin_document_document_data_dictionary_document_data_dictionary_entry_path(@document, @document_data_dictionary, entry.id), method: :delete, data: { confirm: 'Are you sure?' } %>
|
55
|
+
</td>
|
56
|
+
</tr>
|
57
|
+
<% end %>
|
58
|
+
</tbody>
|
59
|
+
</table>
|
60
|
+
</div>
|
61
|
+
|
62
|
+
<h6>
|
63
|
+
<span class='float-left mt-3'>
|
64
|
+
<%== pagy_info(@pagy) %>
|
65
|
+
</span>
|
66
|
+
<span class='float-right'>
|
67
|
+
<%== pagy_bootstrap_nav(@pagy) %>
|
68
|
+
</span>
|
69
|
+
</h6>
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
|
73
|
+
<script>
|
74
|
+
GBLADMIN.SortElements(
|
75
|
+
$("tbody"),
|
76
|
+
"<%= sort_admin_document_document_data_dictionary_document_data_dictionary_entries_path(@document, @document_data_dictionary) %>"
|
77
|
+
);
|
78
|
+
</script>
|
@@ -0,0 +1 @@
|
|
1
|
+
json.partial! "document_data_dictionaries/document_data_dictionary", document_data_dictionary: @document_data_dictionary
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<%= simple_form_for([:admin, @document, @document_data_dictionary, @document_data_dictionary_entry]) do |f| %>
|
2
|
+
<%= f.error_notification %>
|
3
|
+
<%= f.error_notification message: f.object.errors[:base].to_sentence if f.object.errors[:base].present? %>
|
4
|
+
|
5
|
+
<div class="form-inputs">
|
6
|
+
<%= f.input :friendlier_id, input_html: { value: @document.friendlier_id, readonly: true } %>
|
7
|
+
<%= f.input :document_data_dictionary_id, as: :hidden, input_html: { value: @document_data_dictionary.id } %>
|
8
|
+
<%= f.input :field_name, input_html: { class: 'form-control', autofocus: true } %>
|
9
|
+
<%= f.input :field_type, input_html: { class: 'form-control' } %>
|
10
|
+
<%= f.input :values, input_html: { class: 'form-control' } %>
|
11
|
+
<%= f.input :definition, input_html: { class: 'form-control' } %>
|
12
|
+
<%= f.input :definition_source, input_html: { class: 'form-control' } %>
|
13
|
+
<%= f.input :parent_field_name, input_html: { class: 'form-control' } %>
|
14
|
+
</div>
|
15
|
+
|
16
|
+
<div class="form-group">
|
17
|
+
<%= f.submit class: 'btn btn-primary' %>
|
18
|
+
</div>
|
19
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% content_for :title, "Editing document data dictionary entry" %>
|
2
|
+
|
3
|
+
<h1>Editing document data dictionary entry</h1>
|
4
|
+
|
5
|
+
<%= render "form", document_data_dictionary_entry: @document_data_dictionary_entry %>
|
6
|
+
|
7
|
+
<br>
|
8
|
+
|
9
|
+
<div>
|
10
|
+
<%= link_to "Show this document data dictionary entry", admin_document_document_data_dictionary_document_data_dictionary_entry_path(@document, @document_data_dictionary, @document_data_dictionary_entry) %> |
|
11
|
+
<%= link_to "Back to document data dictionary entries", admin_document_document_data_dictionary_document_data_dictionary_entries_path(@document, @document_data_dictionary) %>
|
12
|
+
</div>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<div class="row mb-2">
|
2
|
+
<div class="col">
|
3
|
+
<%= link_to "Back to document data dictionaries", admin_document_document_data_dictionaries_path(@document) %>
|
4
|
+
|
5
|
+
<h1 style="width:100%;">
|
6
|
+
<%= @document.title %> · New Data Dictionary Entry
|
7
|
+
</h1>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
|
11
|
+
<div class="row">
|
12
|
+
<div class="col-5">
|
13
|
+
<%= render "form", document_data_dictionary_entry: @document_data_dictionary_entry %>
|
14
|
+
|
15
|
+
<%= link_to "Back to document data dictionary entries", admin_document_document_data_dictionary_document_data_dictionary_entries_path(@document, @document_data_dictionary) %>
|
16
|
+
</div>
|
@@ -6,12 +6,12 @@
|
|
6
6
|
Document · Distributions
|
7
7
|
|
8
8
|
<% if params[:document_id] %>
|
9
|
-
<%= link_to '+ Import CSV',
|
9
|
+
<%= link_to '+ Import CSV', new_admin_import_distribution_path, { class: 'btn btn-primary float-right' } %>
|
10
10
|
|
11
11
|
<%= link_to '+ New Distribution', new_admin_document_document_distribution_path(@document), { class: 'btn btn-primary float-right mr-2' } %>
|
12
12
|
<% else %>
|
13
13
|
<%= link_to '- Delete CSV', destroy_all_admin_document_distributions_path, { class: 'btn btn-danger float-right' } %>
|
14
|
-
<%= link_to '+ Import CSV',
|
14
|
+
<%= link_to '+ Import CSV', new_admin_import_distribution_path, { class: 'btn btn-primary float-right mr-4' } %>
|
15
15
|
<% end %>
|
16
16
|
</h1>
|
17
17
|
|
@@ -32,6 +32,10 @@
|
|
32
32
|
Additional Assets
|
33
33
|
<span class="badge badge-light"><%= @document.document_assets.count %></span>
|
34
34
|
<% end %>
|
35
|
+
<%= link_to admin_document_document_data_dictionaries_url(@document), class: "ml-2" do %>
|
36
|
+
Data Dictionaries
|
37
|
+
<span class="badge badge-light"><%= @document.document_data_dictionaries.count %></span>
|
38
|
+
<% end %>
|
35
39
|
<%= link_to admin_document_document_distributions_url(@document), class: "ml-2" do %>
|
36
40
|
Distributions
|
37
41
|
<% end %>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<% if @import_distribution.errors.any? %>
|
2
|
+
<div class="alert alert-danger mb-4" role="alert">
|
3
|
+
<h2 class="h4" class="alert-heading"><%= pluralize(@import_distribution.errors.count, "error") %> prohibited this import distribution from being saved</h2>
|
4
|
+
<ol class="mb-0">
|
5
|
+
<% @import_distribution.errors.full_messages.each do |msg| %>
|
6
|
+
<li><%= msg %></li>
|
7
|
+
<% end %>
|
8
|
+
</ol>
|
9
|
+
</div>
|
10
|
+
<% end %>
|
11
|
+
|
12
|
+
<div class="form-inputs">
|
13
|
+
<%= f.input :name, {autofocus: true} %>
|
14
|
+
<%= f.input :source %>
|
15
|
+
<%= f.input :description %>
|
16
|
+
<%= f.file_field :csv_file, direct_upload: true %>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<div class="form-actions">
|
20
|
+
<%= f.button :submit, "+ Create Import Distributions", {class: 'btn btn-primary'} %>
|
21
|
+
</div>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
json.extract! import_distribution, :id, :name, :filename, :source, :description, :row_count, :headers, :encoding, :content_type,
|
4
|
+
:extension, :validity, :validation_result, :created_at, :updated_at
|
5
|
+
json.url import_distribution_url(import_distribution, format: :json)
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<h6>
|
2
|
+
<span class='float-left mt-3'>
|
3
|
+
<%== pagy_info(@pagy_failed) %>
|
4
|
+
</span>
|
5
|
+
<span class='float-right'>
|
6
|
+
<%== pagy_bootstrap_nav(@pagy_failed) %>
|
7
|
+
</span>
|
8
|
+
</h6>
|
9
|
+
|
10
|
+
<table class="table table-striped">
|
11
|
+
<thead>
|
12
|
+
<tr>
|
13
|
+
<th>State</th>
|
14
|
+
<th>Title</th>
|
15
|
+
<th>Identifier</th>
|
16
|
+
<th>Reason</th>
|
17
|
+
</tr>
|
18
|
+
</thead>
|
19
|
+
<tbody>
|
20
|
+
<% @import_failed_distributions.each_with_index do |distribution, index| %>
|
21
|
+
<tr>
|
22
|
+
<td>
|
23
|
+
<span class="badge badge-danger">
|
24
|
+
<%= distribution.state_machine.current_state %>
|
25
|
+
</span>
|
26
|
+
</td>
|
27
|
+
<td><%= distribution.friendlier_id %></td>
|
28
|
+
<td>
|
29
|
+
<%= link_to admin_import_distribution_path(@import_distribution, distribution) do %>
|
30
|
+
<%= distribution.state_machine&.last_transition&.metadata %>
|
31
|
+
<% end %>
|
32
|
+
</td>
|
33
|
+
</tr>
|
34
|
+
<% end %>
|
35
|
+
</tbody>
|
36
|
+
</table>
|
@@ -0,0 +1,35 @@
|
|
1
|
+
<h6>
|
2
|
+
<span class='float-left mt-3'>
|
3
|
+
<%== pagy_info(@pagy_success) %>
|
4
|
+
</span>
|
5
|
+
<span class='float-right'>
|
6
|
+
<%== pagy_bootstrap_nav(@pagy_success) %>
|
7
|
+
</span>
|
8
|
+
</h6>
|
9
|
+
|
10
|
+
<table class="table table-striped">
|
11
|
+
<thead>
|
12
|
+
<tr>
|
13
|
+
<th>State</th>
|
14
|
+
<th>Friendlier ID</th>
|
15
|
+
<th>Distribution URL</th>
|
16
|
+
<th>Reference Type</th>
|
17
|
+
<th>Label</th>
|
18
|
+
</tr>
|
19
|
+
</thead>
|
20
|
+
<tbody>
|
21
|
+
<% @import_success_distributions.each_with_index do |distribution, index| %>
|
22
|
+
<tr>
|
23
|
+
<td>
|
24
|
+
<span class="badge badge-success">
|
25
|
+
<%= distribution.state_machine.current_state %>
|
26
|
+
</span>
|
27
|
+
</td>
|
28
|
+
<td><%= distribution.friendlier_id %></td>
|
29
|
+
<td><%= distribution.distribution_url %></td>
|
30
|
+
<td><%= distribution.reference_type %></td>
|
31
|
+
<td><%= distribution.label %></td>
|
32
|
+
</tr>
|
33
|
+
<% end %>
|
34
|
+
</tbody>
|
35
|
+
</table>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<h1>Editing Import Distribution</h1>
|
2
|
+
|
3
|
+
<%= simple_form_for(@import_distribution, :url => admin_import_distribution_path) do |f| %>
|
4
|
+
<%= render 'form', import_distribution: @import_distribution, f: f %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= link_to 'Show', admin_import_distribution_path(@import_distribution) %> |
|
8
|
+
<%= link_to 'Back', admin_import_distributions_path %>
|
@@ -0,0 +1,58 @@
|
|
1
|
+
<%- @page_title = "GBL♦Admin - Import Distributions" %>
|
2
|
+
|
3
|
+
<div class="row mb-2">
|
4
|
+
<div class="col">
|
5
|
+
<h1 style="width:100%;">
|
6
|
+
Import Distributions
|
7
|
+
<%= link_to '+ New Distributions Import', new_admin_import_distribution_path, { class: 'btn btn-primary float-right' } %>
|
8
|
+
</h1>
|
9
|
+
|
10
|
+
<h6>
|
11
|
+
<span class='float-left mt-3'>
|
12
|
+
<%== pagy_info(@pagy) %>
|
13
|
+
</span>
|
14
|
+
<span class='float-right'>
|
15
|
+
<%== pagy_bootstrap_nav(@pagy) %>
|
16
|
+
</span>
|
17
|
+
</h6>
|
18
|
+
|
19
|
+
<table class="table table-striped table-bordered sortable">
|
20
|
+
<thead class="thead-dark">
|
21
|
+
<tr>
|
22
|
+
<th class="header">Name</th>
|
23
|
+
<th class="header">Filename</th>
|
24
|
+
<th class="header">Source</th>
|
25
|
+
<th class="header">Description</th>
|
26
|
+
<th class="header">Row count</th>
|
27
|
+
<th class="header">Date</th>
|
28
|
+
<th class="header" colspan="3">Actions</th>
|
29
|
+
</tr>
|
30
|
+
</thead>
|
31
|
+
|
32
|
+
<tbody>
|
33
|
+
<% @import_distributions.each do |import_distribution| %>
|
34
|
+
<tr>
|
35
|
+
<td><%= import_distribution.name %></td>
|
36
|
+
<td><%= import_distribution.filename %></td>
|
37
|
+
<td><%= import_distribution.source %></td>
|
38
|
+
<td><%= import_distribution.description %></td>
|
39
|
+
<td><%= import_distribution.row_count %></td>
|
40
|
+
<td><%= import_distribution.created_at %></td>
|
41
|
+
<td><%= link_to 'Show', admin_import_distribution_path(import_distribution) %></td>
|
42
|
+
<td><%= link_to 'Edit', edit_admin_import_distribution_path(import_distribution) %></td>
|
43
|
+
<td><%= link_to 'Destroy', admin_import_distribution_path(import_distribution), method: :delete, data: { confirm: 'Are you sure?' } %></td>
|
44
|
+
</tr>
|
45
|
+
<% end %>
|
46
|
+
</tbody>
|
47
|
+
</table>
|
48
|
+
|
49
|
+
<h6>
|
50
|
+
<span class='float-left mt-3'>
|
51
|
+
<%== pagy_info(@pagy) %>
|
52
|
+
</span>
|
53
|
+
<span class='float-right'>
|
54
|
+
<%== pagy_bootstrap_nav(@pagy) %>
|
55
|
+
</span>
|
56
|
+
</h6>
|
57
|
+
</div>
|
58
|
+
</div>
|
@@ -0,0 +1,7 @@
|
|
1
|
+
<h1>New Import Distribution</h1>
|
2
|
+
|
3
|
+
<%= simple_form_for(@import_distribution.becomes(ImportDistribution), url: admin_import_distributions_path) do |f| %>
|
4
|
+
<%= render 'form', import_distribution: @import_distribution, f: f %>
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<%= link_to 'Back', admin_import_distributions_path %>
|