ion_orders_engine_mockingjay 1.0.1.SNAPSHOT

Sign up to get free protection for your applications and to get access to all the features.
Files changed (173) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +0 -0
  3. data/Rakefile +4 -0
  4. data/app/assets/images/rails.png +0 -0
  5. data/app/assets/javascripts/application.js +16 -0
  6. data/app/assets/javascripts/bootstrap_additions.js.coffee +4 -0
  7. data/app/assets/javascripts/interchange/patients.js.coffee +3 -0
  8. data/app/assets/javascripts/interchange/physicians.js.coffee +3 -0
  9. data/app/assets/javascripts/mock/allergies.js.coffee +3 -0
  10. data/app/assets/javascripts/mock/appointments.js.coffee +3 -0
  11. data/app/assets/javascripts/mock/assignments.js.coffee +17 -0
  12. data/app/assets/javascripts/mock/chart_reviews.js.coffee +3 -0
  13. data/app/assets/javascripts/mock/comments.js.coffee +3 -0
  14. data/app/assets/javascripts/mock/conditions.js.coffee +3 -0
  15. data/app/assets/javascripts/mock/diagnoses.js.coffee +3 -0
  16. data/app/assets/javascripts/mock/documents.js.coffee +3 -0
  17. data/app/assets/javascripts/mock/employments.js.coffee +3 -0
  18. data/app/assets/javascripts/mock/encounters.js.coffee +3 -0
  19. data/app/assets/javascripts/mock/family_contacts.js.coffee +3 -0
  20. data/app/assets/javascripts/mock/family_histories.js.coffee +3 -0
  21. data/app/assets/javascripts/mock/guarantors.js.coffee +3 -0
  22. data/app/assets/javascripts/mock/insurance_plans.js.coffee +3 -0
  23. data/app/assets/javascripts/mock/lab_concepts.js.coffee +4 -0
  24. data/app/assets/javascripts/mock/lab_results.js.coffee +3 -0
  25. data/app/assets/javascripts/mock/locations.js.coffee +3 -0
  26. data/app/assets/javascripts/mock/medical_record_numbers.js.coffee +3 -0
  27. data/app/assets/javascripts/mock/metadata_keywords.js.coffee +3 -0
  28. data/app/assets/javascripts/mock/pharmacies.js.coffee +3 -0
  29. data/app/assets/javascripts/mock/phone_numbers.js.coffee +3 -0
  30. data/app/assets/javascripts/mock/physicians.js.coffee +3 -0
  31. data/app/assets/javascripts/mock/procedure_histories.js.coffee +3 -0
  32. data/app/assets/javascripts/mock/providers.js.coffee +14 -0
  33. data/app/assets/javascripts/mock/questions.js.coffee +3 -0
  34. data/app/assets/javascripts/mock/reference_range.js.coffee +3 -0
  35. data/app/assets/javascripts/mock/sections.js.coffee +3 -0
  36. data/app/assets/javascripts/mock/social_histories.js.coffee +3 -0
  37. data/app/assets/javascripts/mock/state_health_identifiers.js.coffee +3 -0
  38. data/app/assets/javascripts/mock/statistics.js.coffee +3 -0
  39. data/app/assets/javascripts/mock/test_assertions.js.coffee +3 -0
  40. data/app/assets/javascripts/mock/visit.js.coffee +3 -0
  41. data/app/assets/javascripts/mock/vitals_measurement.js.coffee +3 -0
  42. data/app/assets/javascripts/reference/data_elements.js.coffee +3 -0
  43. data/app/assets/javascripts/reference/data_lists.js.coffee +3 -0
  44. data/app/assets/javascripts/reference/data_sets.js.coffee +3 -0
  45. data/app/assets/stylesheets/application.css.scss +13 -0
  46. data/app/assets/stylesheets/bootstrap_and_overrides.css.scss +79 -0
  47. data/app/assets/stylesheets/forms.css.scss +67 -0
  48. data/app/assets/stylesheets/interchange/patients.css.scss +3 -0
  49. data/app/assets/stylesheets/interchange/physicians.css.scss +3 -0
  50. data/app/assets/stylesheets/mock/allergies.css.scss +3 -0
  51. data/app/assets/stylesheets/mock/appointments.css.scss +3 -0
  52. data/app/assets/stylesheets/mock/chart_reviews.css.scss +3 -0
  53. data/app/assets/stylesheets/mock/comments.css.scss +3 -0
  54. data/app/assets/stylesheets/mock/conditions.css.scss +3 -0
  55. data/app/assets/stylesheets/mock/diagnoses.css.scss +3 -0
  56. data/app/assets/stylesheets/mock/documents.css.scss +3 -0
  57. data/app/assets/stylesheets/mock/employments.css.scss +3 -0
  58. data/app/assets/stylesheets/mock/encounters.css.scss +3 -0
  59. data/app/assets/stylesheets/mock/family_contacts.css.scss +3 -0
  60. data/app/assets/stylesheets/mock/family_histories.css.scss +3 -0
  61. data/app/assets/stylesheets/mock/guarantors.css.scss +3 -0
  62. data/app/assets/stylesheets/mock/insurance_plans.css.scss +3 -0
  63. data/app/assets/stylesheets/mock/lab_concepts.css.scss +3 -0
  64. data/app/assets/stylesheets/mock/lab_results.css.scss +3 -0
  65. data/app/assets/stylesheets/mock/locations.css.scss +3 -0
  66. data/app/assets/stylesheets/mock/medical_record_numbers.css.scss +3 -0
  67. data/app/assets/stylesheets/mock/metadata_keywords.css.scss +3 -0
  68. data/app/assets/stylesheets/mock/pharmacies.css.scss +3 -0
  69. data/app/assets/stylesheets/mock/phone_numbers.css.scss +3 -0
  70. data/app/assets/stylesheets/mock/physicians.css.scss +3 -0
  71. data/app/assets/stylesheets/mock/procedure_histories.css.scss +3 -0
  72. data/app/assets/stylesheets/mock/providers.css.scss +3 -0
  73. data/app/assets/stylesheets/mock/questions.css.scss +3 -0
  74. data/app/assets/stylesheets/mock/reference_range.css.scss +3 -0
  75. data/app/assets/stylesheets/mock/sections.css.scss +3 -0
  76. data/app/assets/stylesheets/mock/social_histories.css.scss +3 -0
  77. data/app/assets/stylesheets/mock/state_health_identifiers.css.scss +3 -0
  78. data/app/assets/stylesheets/mock/statistics.css.scss +3 -0
  79. data/app/assets/stylesheets/mock/test_assertions.css.scss +3 -0
  80. data/app/assets/stylesheets/mock/visit.css.scss +3 -0
  81. data/app/assets/stylesheets/mock/vitals_measurement.css.scss +3 -0
  82. data/app/assets/stylesheets/reference/data_elements.css.scss +3 -0
  83. data/app/assets/stylesheets/reference/data_lists.css.scss +3 -0
  84. data/app/assets/stylesheets/reference/data_sets.css.scss +3 -0
  85. data/app/assets/stylesheets/scaffolds.css.scss +66 -0
  86. data/app/controllers/api/base_controller.rb +78 -0
  87. data/app/controllers/api/ion_orders_engine/order_by_id/order_by_id_controller.rb +3220 -0
  88. data/app/controllers/api/ion_orders_engine/order_profile/inpatient_order_profile_controller.rb +3156 -0
  89. data/app/controllers/application_controller.rb +25 -0
  90. data/app/controllers/crud/base_controller.rb +90 -0
  91. data/app/controllers/interchange/base_controller.rb +63 -0
  92. data/app/controllers/interchange/data_sets_controller.rb +40 -0
  93. data/app/controllers/interchange/exports_controller.rb +120 -0
  94. data/app/controllers/interchange/imports_controller.rb +141 -0
  95. data/app/controllers/reference/base_controller.rb +7 -0
  96. data/app/controllers/reference/data_lists_controller.rb +177 -0
  97. data/app/controllers/reference/data_options_controller.rb +147 -0
  98. data/app/controllers/reference/data_sets_controller.rb +160 -0
  99. data/app/helpers/application_helper.rb +389 -0
  100. data/app/helpers/error_messages_helper.rb +23 -0
  101. data/app/helpers/interchange/exports_helper.rb +9 -0
  102. data/app/helpers/interchange/imports_helper.rb +31 -0
  103. data/app/helpers/layout_helper.rb +40 -0
  104. data/app/helpers/reference/data_elements_helper.rb +2 -0
  105. data/app/helpers/reference/data_lists_helper.rb +2 -0
  106. data/app/helpers/reference/data_sets_helper.rb +2 -0
  107. data/app/views/interchange/common/_database_info.json.jbuilder +6 -0
  108. data/app/views/interchange/common/_metadata_keywords.json.jbuilder +13 -0
  109. data/app/views/interchange/common/_test_assertions.json.jbuilder +17 -0
  110. data/app/views/interchange/data_sets/_data_list.json.jbuilder +14 -0
  111. data/app/views/interchange/data_sets/_data_option.json.jbuilder +12 -0
  112. data/app/views/interchange/data_sets/_data_set.json.jbuilder +17 -0
  113. data/app/views/interchange/data_sets/_nested_data_list.json.jbuilder +12 -0
  114. data/app/views/interchange/data_sets/show.json.jbuilder +10 -0
  115. data/app/views/interchange/document_templates/_document_template.json.jbuilder +23 -0
  116. data/app/views/interchange/document_templates/_section.json.jbuilder +11 -0
  117. data/app/views/interchange/document_templates/show.json.jbuilder +10 -0
  118. data/app/views/interchange/exports/_export_summary.html.erb +49 -0
  119. data/app/views/interchange/exports/show.html.erb +35 -0
  120. data/app/views/interchange/imports/_import_summary.html.erb +72 -0
  121. data/app/views/interchange/imports/show.html.erb +37 -0
  122. data/app/views/layouts/_flashbar.html.erb +6 -0
  123. data/app/views/layouts/_navbar.html.erb +38 -0
  124. data/app/views/layouts/_protected_warning.html.erb +7 -0
  125. data/app/views/layouts/_root_model_layout.erb +33 -0
  126. data/app/views/layouts/application.html.erb +39 -0
  127. data/app/views/layouts/reference/data_sets.html.erb +5 -0
  128. data/app/views/reference/data_lists/_data_options.html.erb +31 -0
  129. data/app/views/reference/data_lists/_form.html.erb +23 -0
  130. data/app/views/reference/data_lists/edit.html.erb +6 -0
  131. data/app/views/reference/data_lists/index.html.erb +31 -0
  132. data/app/views/reference/data_lists/new.html.erb +6 -0
  133. data/app/views/reference/data_lists/show.html.erb +55 -0
  134. data/app/views/reference/data_options/_form.html.erb +23 -0
  135. data/app/views/reference/data_options/edit.html.erb +5 -0
  136. data/app/views/reference/data_options/index.html.erb +38 -0
  137. data/app/views/reference/data_options/new.html.erb +5 -0
  138. data/app/views/reference/data_options/show.html.erb +33 -0
  139. data/app/views/reference/data_sets/_form.html.erb +25 -0
  140. data/app/views/reference/data_sets/edit.html.erb +5 -0
  141. data/app/views/reference/data_sets/index.html.erb +40 -0
  142. data/app/views/reference/data_sets/new.html.erb +5 -0
  143. data/app/views/reference/data_sets/show.html.erb +38 -0
  144. data/config/application.rb +100 -0
  145. data/config/boot.rb +6 -0
  146. data/config/database.yml +25 -0
  147. data/config/environment.rb +5 -0
  148. data/config/environments/development.rb +42 -0
  149. data/config/environments/production.rb +64 -0
  150. data/config/environments/test.rb +35 -0
  151. data/config/initializers/backtrace_silencers.rb +7 -0
  152. data/config/initializers/extensions/active_record.rb +13 -0
  153. data/config/initializers/extensions/hash.rb +11 -0
  154. data/config/initializers/extensions/string.rb +15 -0
  155. data/config/initializers/inflections.rb +15 -0
  156. data/config/initializers/mime_types.rb +5 -0
  157. data/config/initializers/reference.rb +77 -0
  158. data/config/initializers/secret_token.rb +7 -0
  159. data/config/initializers/session_store.rb +8 -0
  160. data/config/initializers/simple_form.rb +142 -0
  161. data/config/initializers/simple_form_bootstrap.rb +45 -0
  162. data/config/initializers/wrap_parameters.rb +10 -0
  163. data/config/locales/en.yml +207 -0
  164. data/config/locales/simple_form.en.yml +26 -0
  165. data/config/mongo.yml +18 -0
  166. data/config/routes.rb +4 -0
  167. data/db/schema.rb +16 -0
  168. data/db/seeds.rb +66 -0
  169. data/lib/ion_orders_engine_mockingjay/engine.rb +13 -0
  170. data/lib/ion_orders_engine_mockingjay/version.rb +3 -0
  171. data/lib/ion_orders_engine_mockingjay.rb +4 -0
  172. data/lib/tasks/ion_orders_engine_mockingjay_tasks.rake +4 -0
  173. metadata +215 -0
@@ -0,0 +1,23 @@
1
+ module ErrorMessagesHelper
2
+ # Render error messages for the given objects. The :message and :header_message options are allowed.
3
+ def error_messages_for(*objects)
4
+ options = objects.extract_options!
5
+ options[:header_message] ||= I18n.t(:"activerecord.errors.header", default: "Invalid Fields")
6
+ options[:message] ||= I18n.t(:"activerecord.errors.message", default: "Correct the following errors and try again.")
7
+ messages = objects.compact.map { |o| o.errors.full_messages }.flatten
8
+ unless messages.empty?
9
+ content_tag(:div, class: "error_messages") do
10
+ list_items = messages.map { |msg| content_tag(:li, msg) }
11
+ content_tag(:h2, options[:header_message]) + content_tag(:p, options[:message]) + content_tag(:ul, list_items.join.html_safe)
12
+ end
13
+ end
14
+ end
15
+
16
+ module FormBuilderAdditions
17
+ def error_messages(options = {})
18
+ @template.error_messages_for(@object, options)
19
+ end
20
+ end
21
+ end
22
+
23
+ ActionView::Helpers::FormBuilder.send(:include, ErrorMessagesHelper::FormBuilderAdditions)
@@ -0,0 +1,9 @@
1
+ module Interchange::ExportsHelper
2
+
3
+ def export_submit_button_tag
4
+ submit_tag 'Export', name: nil, class: 'btn btn-primary'
5
+ end
6
+
7
+ end # module
8
+
9
+
@@ -0,0 +1,31 @@
1
+ module Interchange::ImportsHelper
2
+
3
+ # Public: Creates a submit tag for the Import button, handling all styling.
4
+ #
5
+ # Returns String contains HTML for a submit tag.
6
+ def import_submit_button_tag
7
+ submit_tag 'Import', name: nil, class: 'btn btn-primary'
8
+ end
9
+
10
+
11
+ # Public: Creates an HTML string you must raw escape, that formats the number and the title provided such that
12
+ # stacked section summary titles will have numbers and titles line up vertically, because we provide a
13
+ # fixed spacing for the number portion.
14
+ #
15
+ # number - The value to display as well as inform pluralization to use for the title
16
+ # singular_title - The singular variant of the title, which we may pluralize based on the number provided
17
+ #
18
+ # Returns String contains HTML with styling that must be escaped, that provides effectively, two columns of text.
19
+ def section_summary_title(number, singular_title)
20
+ title =
21
+ if number == 1
22
+ singular_title
23
+ else
24
+ singular_title.pluralize
25
+ end
26
+ "<strong><span style='width:30px;float: left; text-align: right;'>#{number}&nbsp;&nbsp;</span>#{title}</strong>"
27
+ end
28
+
29
+ end # module
30
+
31
+
@@ -0,0 +1,40 @@
1
+ # These helper methods can be called in your template to set variables to be used in the layout
2
+ # This module should be included in all views globally,
3
+ # to do so you may need to add this line to your ApplicationController
4
+ # helper :layout
5
+ module LayoutHelper
6
+
7
+ def title(page_title, show_title = true)
8
+ content_for(:title) { h(page_title.to_s) }
9
+ @show_title = show_title
10
+ end
11
+
12
+ def show_title?
13
+ @show_title
14
+ end
15
+
16
+ def stylesheet(*args)
17
+ content_for(:head) { stylesheet_link_tag(*args) }
18
+ end
19
+
20
+ def javascript(*args)
21
+ content_for(:head) { javascript_include_tag(*args) }
22
+ end
23
+
24
+ def has_current_patient?
25
+ !@patient.nil?
26
+ end
27
+
28
+ def current_patient
29
+ @patient
30
+ end
31
+
32
+ def has_current_physician?
33
+ !@physician.nil?
34
+ end
35
+
36
+ def current_physician
37
+ @physician
38
+ end
39
+
40
+ end # module
@@ -0,0 +1,2 @@
1
+ module Reference::DataElementsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module Reference::DataListsHelper
2
+ end
@@ -0,0 +1,2 @@
1
+ module Reference::DataSetsHelper
2
+ end
@@ -0,0 +1,6 @@
1
+ # Displays database info (id, timestamps) that can be useful for informal auditing.
2
+ # We'll display unless the variables @suppress_database_timestamps or @automation advise otherwise.
3
+
4
+ json.id model.id unless @suppress_database_ids
5
+ json.created_at model.created_at unless @suppress_database_timestamps
6
+ json.updated_at model.updated_at unless @suppress_database_timestamps
@@ -0,0 +1,13 @@
1
+ # Metadata Keywords
2
+
3
+ # Is our output target a UIAutomation file?
4
+ if @automation
5
+ # YES: So just build a flat array of keywords:
6
+ json.metadata_keywords metadata_keywords.collect { |keyword| keyword.text }
7
+ else
8
+ # NO: We must be doing an export for later imports. Use the generic model format of spelling out the properties:
9
+ json.metadata_keywords metadata_keywords do |metadata_keyword|
10
+ json.text metadata_keyword.text
11
+ # Note: We do not have timestamps on keywords, so we don't pull in the database partial
12
+ end
13
+ end # if @automation
@@ -0,0 +1,17 @@
1
+ # Test Assertions
2
+
3
+ # UIAutomation: Build a flat array of key-value pairs, with each one having an entry for metadata info:
4
+ json.uiautomation_assertions do
5
+ test_assertions.each do |expected_result|
6
+ json.set!(expected_result.key, expected_result.interpreted_value)
7
+ json.set!("#{expected_result.key}MetadataDescription", expected_result.metadata_description)
8
+ end
9
+ end
10
+
11
+ # For Import: This is for supporting later imports. Use the generic model format of spelling out the properties:
12
+ json.test_assertions test_assertions do |test_assertion|
13
+ json.key test_assertion.key
14
+ json.value_string test_assertion.value_string
15
+ json.value_type test_assertion.value_type
16
+ json.metadata_description test_assertion.metadata_description
17
+ end
@@ -0,0 +1,14 @@
1
+ # DataLists
2
+ json.data_lists data_lists do |data_list|
3
+ json.partial! 'interchange/common/database_info', model: data_list
4
+
5
+ json.display_name data_list.display_name
6
+ json.code_name data_list.code_name
7
+ json.code_number data_list.code_number
8
+ json.option_class_name data_list.option_class_name
9
+ json.metadata_description data_list.metadata_description
10
+
11
+
12
+ json.partial! 'data_option', data_options: data_list.data_options
13
+
14
+ end
@@ -0,0 +1,12 @@
1
+ # DataOptions
2
+ json.data_options data_options do |data_option|
3
+ json.partial! 'interchange/common/database_info', model: data_option
4
+
5
+ json.display_name data_option.display_name
6
+ json.code_name data_option.code_name
7
+ json.code_number data_option.code_number
8
+ json.metadata_description data_option.metadata_description
9
+
10
+ json.partial! 'nested_data_list', nested_data_list: data_option.nested_data_list if data_option.nested_data_list
11
+
12
+ end
@@ -0,0 +1,17 @@
1
+ json.partial! 'interchange/common/database_info', model: @data_set
2
+
3
+ # Core Properties
4
+ json.generated_at Time.now
5
+ json.version ActiveRecord::Migrator.current_version
6
+ json.protected_record @data_set.protected_record?
7
+ json.active @data_set.active?
8
+
9
+ json.name @data_set.name
10
+ json.metadata_description @data_set.metadata_description
11
+
12
+ # Related Models
13
+ json.partial! 'data_list', data_lists: @data_set.data_lists
14
+ #json.partial! 'interchange/common/metadata_keywords', metadata_keywords: @data_set.metadata_keywords
15
+
16
+
17
+
@@ -0,0 +1,12 @@
1
+ # Nested DataList
2
+ json.nested_data_list do
3
+ json.partial! 'interchange/common/database_info', model: nested_data_list
4
+
5
+ json.display_name nested_data_list.display_name
6
+ json.code_name nested_data_list.code_name
7
+ json.code_number nested_data_list.code_number
8
+ json.option_class_name nested_data_list.option_class_name
9
+ json.metadata_description nested_data_list.metadata_description
10
+
11
+ json.partial! 'data_option', data_options: nested_data_list.data_options
12
+ end
@@ -0,0 +1,10 @@
1
+ # This allows the jbuilder file to use ruby key names that on output, use naming that is more akin to JavaScript and iOS naming:
2
+ json.key_format! camelize: :lower
3
+
4
+ # Pull in the data_set partial, which not only has core data_set properties, but all the related models:
5
+ json.partial! 'data_set'
6
+
7
+
8
+
9
+
10
+
@@ -0,0 +1,23 @@
1
+ json.partial! 'interchange/common/database_info', model: @document_template
2
+
3
+ # Core Properties
4
+ json.generated_at Time.now
5
+ json.version ActiveRecord::Migrator.current_version
6
+ json.protected_record @document_template.protected_record?
7
+ json.title @document_template.title
8
+ json.template @document_template.instance_of?(DocumentTemplate)
9
+ json.author_name @document_template.author_name
10
+ json.service_at @document_template.service_at
11
+ json.metadata_description @document_template.metadata_description
12
+
13
+ # Related Models
14
+ json.partial! 'section', sections: @document_template.sections.sorted
15
+ json.partial! 'interchange/common/metadata_keywords', metadata_keywords: @document_template.metadata_keywords
16
+ json.partial! 'interchange/common/test_assertions', test_assertions: @document_template.test_assertions
17
+
18
+ # Potentially very long values
19
+ json.content_source @document_template.content_source unless @automation
20
+
21
+
22
+
23
+
@@ -0,0 +1,11 @@
1
+ # Sections
2
+ json.sections sections do |section|
3
+ json.partial! 'interchange/common/database_info', model: section
4
+
5
+ json.title section.title
6
+ json.position section.position
7
+ json.content_array section.content_array
8
+
9
+ json.partial! 'section', sections: section.sections.sorted
10
+
11
+ end
@@ -0,0 +1,10 @@
1
+ # This allows the jbuilder file to use ruby key names that on output, use naming that is more akin to JavaScript and iOS naming:
2
+ json.key_format! camelize: :lower
3
+
4
+ # Pull in the document_template partial, which not only has core document_template properties, but all the related models:
5
+ json.partial! 'document_template'
6
+
7
+
8
+
9
+
10
+
@@ -0,0 +1,49 @@
1
+ <h4>Last Export</h4>
2
+ <div class="alert alert-info">
3
+ <%= @last_export_summary[:timestamp] %>
4
+ <span class="pull-right"><%= pluralize(@last_export_summary[:total_records], 'Record') %>&nbsp;&mdash;&nbsp;<%= time_ago_in_words @last_export_summary[:timestamp] %> ago</span>
5
+ </div>
6
+ <div class="accordion" id="export_summary_accordion">
7
+
8
+ <div class="accordion-group success">
9
+ <div class="accordion-heading">
10
+ <a class="accordion-toggle" data-toggle="collapse" data-parent="#export_summary_accordion" href="#collapseExportSuccessful">
11
+ <%= raw section_summary_title(@last_export_summary[:successful].count, 'Successful Export') %>
12
+ </a>
13
+ </div>
14
+ <div id="collapseExportSuccessful" class="accordion-body collapse in">
15
+ <div class="accordion-inner">
16
+ <% @last_export_summary[:successful].each do | entry | %>
17
+ <%= entry.model_qualified_title %><br/>
18
+ <% end %>
19
+ <% if @last_export_summary[:successful].empty? %>
20
+ No records successfully exported.
21
+ <% end %>
22
+ </div>
23
+ </div>
24
+ </div>
25
+
26
+ <div class="accordion-group failure">
27
+ <div class="accordion-heading">
28
+ <a class="accordion-toggle" data-toggle="collapse" data-parent="#export_summary_accordion" href="#collapseExportFailures">
29
+ <%= raw section_summary_title(@last_export_summary[:failures].count, 'Export Failure') %>
30
+ </a>
31
+ </div>
32
+ <div id="collapseExportFailures" class="accordion-body collapse">
33
+ <div class="accordion-inner">
34
+ <% @last_export_summary[:failures].each do | entry | %>
35
+ <%= entry.model_qualified_title %><br/>
36
+ <ul>
37
+ <% entry.export_errors.each do | export_error | %>
38
+ <li><%= export_error %></li>
39
+ <% end %>
40
+ </ul>
41
+ <% end %>
42
+ <% unless @last_export_summary[:has_failures] %>
43
+ No export failures to report.
44
+ <% end %>
45
+ </div>
46
+ </div>
47
+ </div>
48
+
49
+ </div>
@@ -0,0 +1,35 @@
1
+ <div class="page-header">
2
+ <h1>Export</h1>
3
+ </div>
4
+
5
+ <dl class="dl-horizontal">
6
+ This facility allows you to export JSON files that can later be exported by this or
7
+ another Mockingjay instance. Optionally, you can select to export to a JavaScript file
8
+ meant for execution by UIAutomation tests as source data.<br/><br/>
9
+ Output from an export operation can be found here, as <strong>.js</strong> files:
10
+ <ul>
11
+ <li>/public/interchange/export/Patients</li>
12
+ <li>/public/interchange/export/Physicians</li>
13
+ <li>/public/interchange/export/DocumentTemplates</li>
14
+ <li>/public/interchange/export/DataSets</li>
15
+ </ul>
16
+
17
+
18
+ <div class='well'>
19
+ <%= form_tag interchange_export_path, method: 'post' do %>
20
+ <h5>Top Level Collections to Export</h5>
21
+ <%= check_box_tag(:export_patients, true, @selections[:export_patients]) %> <div class='inline-label'>Patients</div><br/>
22
+ <%= check_box_tag(:export_physicians, true, @selections[:export_physicians]) %> <div class='inline-label'>Physicians</div><br/>
23
+ <%= check_box_tag(:export_document_templates, true, @selections[:export_document_templates]) %> <div class='inline-label'>Document Templates</div><br/>
24
+ <%= check_box_tag(:export_data_sets, true, @selections[:export_data_sets]) %> <div class='inline-label'>Data Sets</div><br/>
25
+ <br/>
26
+ <h5>Options</h5>
27
+ <%= check_box_tag(:restrict_by_keywords, true, @selections[:restrict_by_keywords]) %> <div class='inline-label'>Restrict to only those with <strong>any</strong> of the following keywords:</div><br/>
28
+ <span style="width:18px;float:left;">&nbsp;</span><%= text_field_tag(:keywords_csv, @selections[:keywords_csv], size: 140, placeholder: 'separate with commas') %> <br/>
29
+ <br/><br/>
30
+ <%= export_submit_button_tag %>
31
+ <% end %>
32
+ </div>
33
+ </dl>
34
+
35
+ <%= render :partial => 'export_summary' unless @last_export_summary.nil? %>
@@ -0,0 +1,72 @@
1
+ <h4>Last Import</h4>
2
+ <div class="alert alert-info">
3
+ <%= @last_import_summary[:timestamp] %>
4
+ <span class="pull-right"><%= pluralize(@last_import_summary[:total_records], 'Record') %>&nbsp;&mdash;&nbsp;<%= time_ago_in_words @last_import_summary[:timestamp] %> ago</span>
5
+ </div>
6
+ <div class="accordion" id="import_summary_accordion">
7
+
8
+ <div class="accordion-group success">
9
+ <div class="accordion-heading">
10
+ <a class="accordion-toggle" data-toggle="collapse" data-parent="#import_summary_accordion" href="#collapseImportSuccessful">
11
+ <%= raw section_summary_title(@last_import_summary[:successful].count, 'Successful Import') %>
12
+ </a>
13
+ </div>
14
+ <div id="collapseImportSuccessful" class="accordion-body collapse in">
15
+ <div class="accordion-inner">
16
+ <% @last_import_summary[:successful].each do | entry | %>
17
+ <%= entry.model_qualified_title %><br/>
18
+ <% end %>
19
+ <% if @last_import_summary[:successful].empty? %>
20
+ No records successfully imported.
21
+ <% end %>
22
+ </div>
23
+ </div>
24
+ </div>
25
+
26
+ <div class="accordion-group skipped">
27
+ <div class="accordion-heading">
28
+ <a class="accordion-toggle" data-toggle="collapse" data-parent="#import_summary_accordion" href="#collapseImportSkipped">
29
+ <%= raw section_summary_title(@last_import_summary[:skipped].count, 'Skipped Import') %>
30
+ </a>
31
+ </div>
32
+ <div id="collapseImportSkipped" class="accordion-body collapse">
33
+ <div class="accordion-inner">
34
+ <% @last_import_summary[:skipped].each do | entry | %>
35
+ <%= entry.model_qualified_title %><br/>
36
+ <ul>
37
+ <% entry.import_notices.each do | notice | %>
38
+ <li><%= notice %></li>
39
+ <% end %>
40
+ </ul>
41
+ <% end %>
42
+ <% unless @last_import_summary[:has_skips] %>
43
+ No records skipped.
44
+ <% end %>
45
+ </div>
46
+ </div>
47
+ </div>
48
+
49
+ <div class="accordion-group failure">
50
+ <div class="accordion-heading">
51
+ <a class="accordion-toggle" data-toggle="collapse" data-parent="#import_summary_accordion" href="#collapseImportFailures">
52
+ <%= raw section_summary_title(@last_import_summary[:failures].count, 'Import Failure') %>
53
+ </a>
54
+ </div>
55
+ <div id="collapseImportFailures" class="accordion-body collapse">
56
+ <div class="accordion-inner">
57
+ <% @last_import_summary[:failures].each do | entry | %>
58
+ <%= entry.model_qualified_title %><br/>
59
+ <ul>
60
+ <% entry.import_errors.each do | import_error | %>
61
+ <li><%= import_error %></li>
62
+ <% end %>
63
+ </ul>
64
+ <% end %>
65
+ <% unless @last_import_summary[:has_failures] %>
66
+ No import failures to report.
67
+ <% end %>
68
+ </div>
69
+ </div>
70
+ </div>
71
+
72
+ </div>
@@ -0,0 +1,37 @@
1
+ <div class="page-header">
2
+ <h1>Import</h1>
3
+ </div>
4
+
5
+ <dl class="dl-horizontal">
6
+ This facility allows you to import JSON files that you've already exported using Mockingjay in the past.
7
+ We import from the following paths, blowing away all existing data for the model type imported.<br/> <br/>
8
+ <ul>
9
+ <li>/public/interchange/import/Patients</li>
10
+ <li>/public/interchange/import/Physicians</li>
11
+ <li>/public/interchange/import/DocumentTemplates</li>
12
+ <li>/public/interchange/import/DataSets</li>
13
+ </ul>
14
+
15
+ <div class='well'>
16
+ <%= form_tag interchange_import_path, method: 'post' do %>
17
+ <h5>Top Level Collections to Import</h5>
18
+ <%= check_box_tag(:import_patients, true, @selections[:import_patients]) %> <div class='inline-label'>Patients</div><br/>
19
+ <%= check_box_tag(:import_physicians, true, @selections[:import_physicians]) %> <div class='inline-label'>Physicians</div><br/>
20
+ <%= check_box_tag(:import_document_templates, true, @selections[:import_document_templates]) %> <div class='inline-label'>Document Templates</div><br/>
21
+ <%= check_box_tag(:import_data_sets, true, @selections[:import_data_sets]) %> <div class='inline-label'>Data Sets</div><br/>
22
+ <h5>Options</h5>
23
+ <%= check_box_tag(:destroy_existing, true, @selections[:destroy_existing]) %> <div class='inline-label'>Destroy existing Collection(s) prior to import</div><br/>
24
+ <%= check_box_tag(:cleanup, true, @selections[:cleanup]) %> <div class='inline-label'>Delete source files after successful import</div><br/>
25
+
26
+ <h5>Duplicates</h5>
27
+ <%= radio_button_tag(:duplicates, 'Allow', @selections[:allow_duplicates]) %> <div class='inline-label'>Allow</div>
28
+ <%= radio_button_tag(:duplicates, 'Skip', @selections[:skip_duplicates]) %> <div class='inline-label'>Skip</div>
29
+ <%= radio_button_tag(:duplicates, 'Replace', @selections[:replace_duplicates]) %> <div class='inline-label'>Replace</div>
30
+
31
+ <br/><br/>
32
+ <%= import_submit_button_tag %>
33
+ <% end %>
34
+ </div>
35
+ </dl>
36
+
37
+ <%= render :partial => 'import_summary' unless @last_import_summary.nil? %>
@@ -0,0 +1,6 @@
1
+ <% flash.each do |name, msg| %>
2
+ <div class="alert alert-<%= name == :notice ? "success" : "error" %>">
3
+ <a class="close" data-dismiss="alert">×</a>
4
+ <%= msg %>
5
+ </div>
6
+ <% end %>
@@ -0,0 +1,38 @@
1
+ <div class="navbar navbar-inverse navbar-fixed-top">
2
+ <div class="navbar-inner">
3
+ <div class="container">
4
+ <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"></a> <a class="brand" href="#">Inpatient Mockingjay</a>
5
+ <div class="nav-collapse">
6
+ <ul class="nav">
7
+ <li>
8
+ <%= link_to "Patients", mock_patients_path %>
9
+ </li>
10
+ <li>
11
+ <%= link_to "Physicians", mock_physicians_path %>
12
+ </li>
13
+ <li>
14
+ <%= link_to "Groups", mock_groups_path %>
15
+ </li>
16
+ <li>
17
+ <%= link_to "Document Templates", mock_document_templates_path %>
18
+ </li>
19
+ <li>
20
+ <%= link_to "Metadata", mock_metadata_keywords_path %>
21
+ </li>
22
+ <li>
23
+ <%= link_to "Data Sets", reference_data_sets_path %>
24
+ </li>
25
+ <li>
26
+ <%= link_to "Statistics", mock_statistics_show_path %>
27
+ </li>
28
+ <li>
29
+ <%= link_to "Import", interchange_import_path %>
30
+ </li>
31
+ <li>
32
+ <%= link_to "Export", interchange_export_path %>
33
+ </li>
34
+ </ul>
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </div>
@@ -0,0 +1,7 @@
1
+ <% if root_model && root_model.protected_record? %>
2
+ <div class="alert alert-block">
3
+ <h4>Warning!</h4>
4
+ This data is associated with the protected <%=root_model.class.name %> record '<strong><%=root_model.short_title %></strong>'.
5
+ It is not meant to be changed, because one or more formal tests rely on it.
6
+ </div>
7
+ <% end %>
@@ -0,0 +1,33 @@
1
+ <head>
2
+ <title>Inpatient Mockingjay</title>
3
+ <!--[if lt IE 9]>
4
+ <script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
5
+ <![endif]-->
6
+ <%= stylesheet_link_tag "application", :media => "all" %>
7
+ <%= javascript_include_tag "application" %>
8
+ <%= csrf_meta_tags %>
9
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
10
+ </head>
11
+
12
+ <body>
13
+ <%= render :partial => 'layouts/navbar' %>
14
+
15
+ <div class="container">
16
+ <%= render_breadcrumbs :builder => ::BootstrapBreadcrumbsBuilder %>
17
+ <%= render :partial => 'layouts/flashbar' %>
18
+ <%= render :partial => 'layouts/protected_warning', :locals => { :root_model => root_model } %>
19
+
20
+
21
+ <div class="row">
22
+ <div class="span7"><%= yield %></div>
23
+ <div class="span1"></div>
24
+ <div class="span4">
25
+ <%= render :partial => recent if defined? recent %>
26
+ </div>
27
+ </div>
28
+ </div>
29
+ <br/>
30
+ <br/>
31
+ <br/>
32
+ <br/>
33
+ </body>
@@ -0,0 +1,39 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>Inpatient Mockingjay</title>
5
+ <!--[if lt IE 9]>
6
+ <script src="http://html5shim.googlecode.com/svn/trunk/html5.js" type="text/javascript"></script>
7
+ <![endif]-->
8
+ <%= stylesheet_link_tag "application", :media => "all" %>
9
+ <%= javascript_include_tag "application" %>
10
+ <%= csrf_meta_tags %>
11
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
12
+ </head>
13
+ <body>
14
+ <%= render :partial => 'layouts/navbar' %>
15
+
16
+ <div class="container">
17
+ <%= render_breadcrumbs :builder => ::BootstrapBreadcrumbsBuilder %>
18
+ <%= render :partial => 'layouts/flashbar' %>
19
+ <%= render :partial => 'layouts/protected_warning', :locals => { :root_model => @patient } %>
20
+ <%= render :partial => 'layouts/protected_warning', :locals => { :root_model => @physician } %>
21
+ <%= render :partial => 'layouts/protected_warning', :locals => { :root_model => @document_template } %>
22
+ <%= render :partial => 'layouts/protected_warning', :locals => { :root_model => @data_set } %>
23
+
24
+ <div class="row">
25
+ <div class="span7">
26
+ <%= yield %>
27
+ </div>
28
+ <div class="span5">
29
+ <%= render :partial => current_patient if has_current_patient? %>
30
+ <%= render :partial => current_physician if has_current_physician? %>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ <br/>
35
+ <br/>
36
+ <br/>
37
+ <br/>
38
+ </body>
39
+ </html>
@@ -0,0 +1,5 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <%= render :partial => 'layouts/root_model_layout', :locals => { :root_model => @data_set } %>
4
+ </html>
5
+
@@ -0,0 +1,31 @@
1
+ <div class="btn-group">
2
+ <h4>Data Options</h4>
3
+ </div>
4
+
5
+ <%= go_button_link([:reference, @data_list, :data_options], as_mini: true, title: 'View All') %>
6
+ <%= new_button_link [:new, :reference, @data_list, :data_option] %>
7
+
8
+ <table class="table table-striped">
9
+ <thead>
10
+ <tr>
11
+ <th>Display Name</th>
12
+ <th>Code Name</th>
13
+ <th>Code Number</th>
14
+ <th><%= actions_table_heading %></th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <% data_options.each do |data_option| %>
19
+ <tr>
20
+ <td><%= data_option.display_name %></td>
21
+ <td><%= data_option.code_name %></td>
22
+ <td><%= data_option.code_number %></td>
23
+ <td>
24
+ <%= show_button_link [:reference, @data_list, data_option], as_mini: true %>
25
+ <%= edit_button_link [:edit, :reference, @data_list, data_option], as_mini: true %>
26
+ <%= destroy_button_link [:reference, @data_list, data_option], as_mini: true %>
27
+ </td>
28
+ </tr>
29
+ <% end %>
30
+ </tbody>
31
+ </table>