renalware-core 2.0.112 → 2.0.118

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 (199) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +0 -2
  3. data/app/assets/javascripts/renalware/application.js.erb +0 -1
  4. data/app/assets/javascripts/renalware/feed_only_inputs.js.erb +26 -0
  5. data/app/assets/javascripts/renalware/feeds.js +50 -0
  6. data/app/assets/javascripts/renalware/person_ajax_search.js +43 -0
  7. data/app/assets/stylesheets/renalware/application.scss +0 -1
  8. data/app/assets/stylesheets/renalware/modules/_admin.scss +7 -0
  9. data/app/assets/stylesheets/renalware/modules/_pathology.scss +1 -1
  10. data/app/assets/stylesheets/renalware/modules/_patients.scss +6 -0
  11. data/app/assets/stylesheets/renalware/modules/_snippets.scss +2 -2
  12. data/app/assets/stylesheets/renalware/partials/_forms.scss +5 -1
  13. data/app/assets/stylesheets/renalware/partials/_layout.scss +4 -0
  14. data/app/components/renalware/patients/side_menu_component.html.slim +7 -0
  15. data/app/components/renalware/patients/side_menu_component.rb +18 -0
  16. data/app/controllers/renalware/clinical/body_compositions_controller.rb +6 -0
  17. data/app/controllers/renalware/feeds/hl7_test_messages_controller.rb +59 -0
  18. data/app/controllers/renalware/hd/mdm_patients_controller.rb +16 -6
  19. data/app/controllers/renalware/hd/scheduling/diaries_controller.rb +91 -0
  20. data/app/controllers/renalware/hd/scheduling/diary_slots_controller.rb +169 -0
  21. data/app/controllers/renalware/hd/session_forms/batches_controller.rb +1 -1
  22. data/app/controllers/renalware/pathology/observation_requests_controller.rb +23 -4
  23. data/app/controllers/renalware/pathology/requests/requests_controller.rb +0 -4
  24. data/app/controllers/renalware/patients/abridgements_controller.rb +39 -0
  25. data/app/controllers/renalware/pd/regimes_controller.rb +26 -0
  26. data/app/controllers/renalware/problems/notes_controller.rb +45 -18
  27. data/app/controllers/renalware/problems/problems_controller.rb +2 -2
  28. data/app/helpers/renalware/application_helper.rb +9 -0
  29. data/app/helpers/renalware/article_helper.rb +18 -0
  30. data/app/helpers/renalware/form_helper.rb +3 -2
  31. data/app/helpers/renalware/users_helper.rb +5 -1
  32. data/app/javascript/controllers/clipboard_controller.js +16 -0
  33. data/app/javascript/packs/renalware_core.js +20 -0
  34. data/app/jobs/feed_job.rb +4 -7
  35. data/app/jobs/hl7_message_example.yml +2 -2
  36. data/app/models/renalware/feeds.rb +2 -2
  37. data/app/models/renalware/feeds/files/practice_memberships/import_job.rb +3 -0
  38. data/app/models/renalware/feeds/files/primary_care_physicians/import_job.rb +2 -0
  39. data/app/models/renalware/feeds/hl7_message.rb +57 -6
  40. data/app/models/renalware/feeds/hl7_test_form.rb +10 -0
  41. data/app/models/renalware/feeds/hl7_test_message.rb +11 -0
  42. data/app/models/renalware/feeds/message_parser.rb +6 -2
  43. data/app/models/renalware/feeds/message_processor.rb +46 -37
  44. data/app/models/renalware/feeds/persist_message.rb +9 -3
  45. data/app/models/renalware/hd/scheduling/archive_arguments.rb +19 -0
  46. data/app/models/renalware/hd/scheduling/diary.rb +54 -0
  47. data/app/models/renalware/hd/scheduling/diary_housekeeping_job.rb +84 -0
  48. data/app/models/renalware/hd/scheduling/diary_range.rb +69 -0
  49. data/app/models/renalware/hd/scheduling/diary_slot.rb +88 -0
  50. data/app/models/renalware/hd/scheduling/find_or_create_diary_by_week_query.rb +52 -0
  51. data/app/models/renalware/hd/scheduling/find_or_create_master_diary.rb +27 -0
  52. data/app/models/renalware/hd/scheduling/master_diary.rb +35 -0
  53. data/app/models/renalware/hd/scheduling/weekly_diary.rb +47 -0
  54. data/app/models/renalware/pathology/message_listener.rb +2 -2
  55. data/app/models/renalware/pathology/requests/global_rule/latest_crf_older_than_weeks.rb +38 -0
  56. data/app/models/renalware/pathology/requests/global_rule/patient_is_diabetic.rb +1 -1
  57. data/app/models/renalware/pathology/requests/global_rule_set/patient_rule_set_decision.rb +4 -0
  58. data/app/models/renalware/patient.rb +1 -1
  59. data/app/models/renalware/patients.rb +4 -3
  60. data/app/models/renalware/patients/abridgement.rb +18 -0
  61. data/app/models/renalware/patients/abridgement_search_form.rb +12 -0
  62. data/app/models/renalware/patients/ingestion/command.rb +25 -0
  63. data/app/models/renalware/patients/ingestion/command_factory.rb +135 -0
  64. data/app/models/renalware/patients/ingestion/commands/add_or_update_patient.rb +65 -0
  65. data/app/models/renalware/patients/ingestion/message_listener.rb +21 -0
  66. data/app/models/renalware/patients/ingestion/message_mapper.rb +26 -0
  67. data/app/models/renalware/patients/ingestion/message_mappers/patient.rb +73 -0
  68. data/app/models/renalware/patients/ingestion/update_master_patient_index.rb +60 -0
  69. data/app/models/renalware/patients/ingestion/update_master_patient_index_job.rb.dead +20 -0
  70. data/app/models/renalware/problems/note.rb +4 -0
  71. data/app/models/renalware/problems/problem.rb +6 -2
  72. data/app/models/renalware/ukrdc/incoming/paths.rb +6 -7
  73. data/app/policies/renalware/admin/devops_policy.rb +18 -0
  74. data/app/policies/renalware/hd/{diary_policy.rb → scheduling/diary_policy.rb} +3 -1
  75. data/app/presenters/renalware/clinical/profile_presenter.rb +2 -1
  76. data/app/presenters/renalware/directory/person_auto_complete_presenter.rb +1 -1
  77. data/app/presenters/renalware/hd/scheduling/diary_presenter.rb +84 -0
  78. data/app/presenters/renalware/hd/scheduling/diary_slot_presenter.rb +74 -0
  79. data/app/presenters/renalware/hd/scheduling/null_slot.rb +42 -0
  80. data/app/presenters/renalware/pd/dashboard_presenter.rb +3 -2
  81. data/app/views/renalware/accesses/procedures/_form.html.slim +5 -1
  82. data/app/views/renalware/accesses/procedures/_list.html.slim +11 -4
  83. data/app/views/renalware/accesses/procedures/show.html.slim +17 -19
  84. data/app/views/renalware/addresses/_form.html.slim +17 -12
  85. data/app/views/renalware/admin/cache/show.html.slim +24 -0
  86. data/app/views/renalware/clinical/body_compositions/_list.html.slim +7 -43
  87. data/app/views/renalware/clinical/body_compositions/_table.html.slim +42 -0
  88. data/app/views/renalware/clinical/body_compositions/index.html.slim +9 -0
  89. data/app/views/renalware/clinical/dry_weights/_list.html.slim +2 -8
  90. data/app/views/renalware/clinical/dry_weights/_table.html.slim +7 -0
  91. data/app/views/renalware/clinical/profiles/show.html.slim +4 -2
  92. data/app/views/renalware/feeds/hl7_test_messages/create.js.erb +10 -0
  93. data/app/views/renalware/feeds/hl7_test_messages/new.slim +18 -0
  94. data/app/views/renalware/hd/mdm_patients/_filters.html.slim +0 -11
  95. data/app/views/renalware/hd/mdm_patients/_page_actions.html.slim +29 -0
  96. data/app/views/renalware/hd/mdm_patients/index.html.slim +7 -4
  97. data/app/views/renalware/hd/{diaries → scheduling/diaries}/_page_actions.html.slim +4 -4
  98. data/app/views/renalware/hd/{diaries → scheduling/diaries}/_table.html.slim +0 -0
  99. data/app/views/renalware/hd/{diaries → scheduling/diaries}/_weekly_diary.html.slim +1 -1
  100. data/app/views/renalware/hd/{diaries → scheduling/diaries}/edit.html.slim +6 -6
  101. data/app/views/renalware/hd/{diaries → scheduling/diaries}/index.html.slim +0 -0
  102. data/app/views/renalware/hd/{diaries → scheduling/diaries}/show.pdf.slim +0 -0
  103. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/_form.html.slim +15 -6
  104. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/_slot.html.slim +2 -2
  105. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/_tab.html.slim +1 -1
  106. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/create.js.erb +1 -1
  107. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/destroy.js.erb +1 -1
  108. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/edit.html.slim +2 -2
  109. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/new.html.slim +0 -0
  110. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/new.js.erb +0 -0
  111. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/show.js.erb +0 -0
  112. data/app/views/renalware/hd/{diary_slots → scheduling/diary_slots}/update.js.erb +1 -1
  113. data/app/views/renalware/hospitals/units/index.html.slim +2 -2
  114. data/app/views/renalware/layouts/_patient.html.slim +5 -0
  115. data/app/views/renalware/letters/contacts/_form.html.slim +10 -13
  116. data/app/views/renalware/letters/letters/_form.html.slim +2 -9
  117. data/app/views/renalware/navigation/_developer.html.slim +4 -0
  118. data/app/views/renalware/navigation/_menu.html.slim +2 -0
  119. data/app/views/renalware/pathology/observation_requests/_filters.html.slim +17 -0
  120. data/app/views/renalware/pathology/observation_requests/index.html.slim +2 -1
  121. data/app/views/renalware/patients/_layout.html.slim +1 -0
  122. data/app/views/renalware/patients/abridgements/_abridgement.html.slim +8 -0
  123. data/app/views/renalware/patients/abridgements/_table.html.slim +12 -0
  124. data/app/views/renalware/patients/abridgements/index.html.slim +22 -0
  125. data/app/views/renalware/patients/alerts/create.json +3 -0
  126. data/app/views/renalware/patients/patients/_form.html.slim +36 -17
  127. data/app/views/renalware/patients/patients/edit.html.slim +1 -1
  128. data/app/views/renalware/patients/patients/new.html.slim +1 -1
  129. data/app/views/renalware/patients/side_menu/_actions.html.slim +2 -0
  130. data/app/views/renalware/pd/_apd_regimes.html.slim +1 -1
  131. data/app/views/renalware/pd/_capd_regimes.html.slim +1 -1
  132. data/app/views/renalware/pd/dashboards/show/_apd_regimes.html.slim +11 -2
  133. data/app/views/renalware/pd/dashboards/show/_capd_regimes.html.slim +11 -2
  134. data/app/views/renalware/pd/regimes/index.html.slim +7 -0
  135. data/app/views/renalware/problems/notes/_form.html.slim +1 -1
  136. data/app/views/renalware/problems/notes/_table.html.slim +9 -3
  137. data/app/views/renalware/problems/notes/form.js.erb +3 -1
  138. data/app/views/renalware/renal/profiles/_form.html.slim +7 -24
  139. data/app/views/renalware/shared/documents/_binary_marker_input.html.slim +2 -2
  140. data/app/views/renalware/shared/documents/_blood_group_input.html.slim +4 -2
  141. data/app/views/renalware/transplants/registrations/_form.html.slim +22 -17
  142. data/config/locales/renalware/clinical/body_composition.yml +6 -3
  143. data/config/locales/renalware/clinical/dry_weight.en.yml +4 -3
  144. data/config/locales/renalware/hd/diary_slots.en.yml +3 -2
  145. data/config/locales/renalware/letters/contact.en.yml +0 -2
  146. data/config/routes.rb +1 -0
  147. data/config/routes/feeds.rb +5 -0
  148. data/config/routes/hd.rb +11 -7
  149. data/config/routes/letters.rb +0 -5
  150. data/config/routes/patients.rb +2 -1
  151. data/config/routes/pd.rb +2 -2
  152. data/config/routes/renal.rb +0 -5
  153. data/config/webpack/development.js +5 -0
  154. data/config/webpack/environment.js +3 -0
  155. data/config/webpack/production.js +5 -0
  156. data/config/webpack/test.js +5 -0
  157. data/config/webpacker.yml +103 -0
  158. data/db/functions/hd_diary_archive_elapsed_master_slots_v01.sql +40 -0
  159. data/db/migrate/20190322120025_create_feed_hl7_test_messages.rb +12 -0
  160. data/db/migrate/20190325134823_create_patients_master_index.rb +24 -0
  161. data/db/migrate/20190327100851_add_handled_to_feed_messages.rb +5 -0
  162. data/db/migrate/20191012121433_add_consultant_to_users.rb +7 -0
  163. data/db/migrate/20191018143635_create_hd_diary_matrix_view.rb +7 -0
  164. data/db/migrate/20191018144917_create_fn_to_archive_master_slots.rb +9 -0
  165. data/db/views/hd_diary_matrix_v01.sql +38 -0
  166. data/lib/core_extensions/active_record/sort.rb +27 -9
  167. data/lib/renalware.rb +13 -1
  168. data/lib/renalware/configuration.rb +3 -0
  169. data/lib/renalware/engine.rb +31 -0
  170. data/lib/renalware/version.rb +1 -1
  171. data/lib/renalware/week_period.rb +8 -7
  172. data/lib/tasks/hd.rake +7 -0
  173. data/lib/tasks/pathology.rake +1 -1
  174. data/lib/tasks/renalware.rake +116 -0
  175. data/spec/factories/hd/scheduling/diaries.rb +18 -0
  176. data/spec/factories/hd/{slots.rb → scheduling/slots.rb} +1 -1
  177. data/spec/factories/patients/abridgements.rb +9 -0
  178. data/spec/support/hl7_helpers.rb +13 -0
  179. data/spec/support/pages/letters/form.rb +4 -1
  180. metadata +126 -49
  181. data/app/assets/javascripts/renalware/auto_complete.js +0 -63
  182. data/app/controllers/renalware/hd/diaries_controller.rb +0 -89
  183. data/app/controllers/renalware/hd/diary_slots_controller.rb +0 -175
  184. data/app/controllers/renalware/letters/descriptions_controller.rb +0 -22
  185. data/app/controllers/renalware/renal/prd_descriptions_controller.rb +0 -15
  186. data/app/models/renalware/hd/archive_yesterdays_slots_job.rb +0 -69
  187. data/app/models/renalware/hd/diary.rb +0 -41
  188. data/app/models/renalware/hd/diary_slot.rb +0 -83
  189. data/app/models/renalware/hd/find_or_create_diary_by_week_query.rb +0 -50
  190. data/app/models/renalware/hd/find_or_create_master_diary.rb +0 -26
  191. data/app/models/renalware/hd/master_diary.rb +0 -32
  192. data/app/models/renalware/hd/weekly_diary.rb +0 -45
  193. data/app/models/renalware/renal/prd_descriptions/search_query.rb +0 -35
  194. data/app/presenters/renalware/hd/diary_presenter.rb +0 -79
  195. data/app/presenters/renalware/hd/diary_slot_presenter.rb +0 -72
  196. data/app/presenters/renalware/hd/null_slot.rb +0 -40
  197. data/app/views/renalware/renal/prd_descriptions/search.json.jbuilder +0 -6
  198. data/lib/test_support/autocomplete_helpers.rb +0 -14
  199. data/spec/factories/hd/diaries.rb +0 -14
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5ca791105ad77524bc53a491d593ca9871363fdd5b3c3b874755f1a3898ca8c
4
- data.tar.gz: 770c7beab9d9369f637cf067ff7fe9a068a579805690aeb76ef77a080be3bf6d
3
+ metadata.gz: 362a3539cb21366fb7702b1e0e6131abbe433e9e6212898ad9a599c80ed67ba7
4
+ data.tar.gz: eb33cd22ab7bbda713cfefe9d9cf007eb79bff1ed3dcac72b7a7edb09781a85f
5
5
  SHA512:
6
- metadata.gz: a10238b66a41f3a73e924acf31ac1691194fefd2738764a52bc3bcef8a75872288f0dbb55835ceed2579a50f2357b214641c55cc5d37a89ffab289af065a8514
7
- data.tar.gz: 1f17f033bd3a78c003e385500b4505bb3eb1ec452adcc6c8850a210f79d0a2a5616065581a5eb2f891553dcbc9cbc409abfcf2f2f95be707ce59ff8843ac1fb0
6
+ metadata.gz: e502880f5d989ea8741e218033bf9f5235ffd9be6ce2c05229f8da46f06c2f509f254014dfc0363b637b5c6a6fc5e46532af3e2c922bc4e373a352602ca5f115
7
+ data.tar.gz: 120370c1f5c9fb3ece4f87f30cae88a33f07d4c2de6077de0a4c5a7adff832b4df862bdefd08459d579ff00c2ffb3d736fa81cd15c7160cee3bde5de6869bc0f
data/Rakefile CHANGED
@@ -35,9 +35,7 @@ namespace :assets do
35
35
 
36
36
  desc "Precompile assets within dummy app"
37
37
  task :precompile do
38
- p "Here"
39
38
  Rake::Task["app:yarn:install"].invoke
40
- p "There"
41
39
  Rake::Task["app:assets:precompile"].invoke
42
40
  end
43
41
 
@@ -15,7 +15,6 @@
15
15
  //= require jquery-readyselector
16
16
  //= require jquery_ujs
17
17
  //= require jquery-ui/core
18
- //= require jquery-ui/widgets/autocomplete
19
18
  //= require jquery-ui/widgets/sortable
20
19
  //= require jquery-ui/effects/effect-highlight
21
20
  //= require dataTables/jquery.dataTables
@@ -0,0 +1,26 @@
1
+ var Renalware = typeof Renalware === 'undefined' ? {} : Renalware;
2
+
3
+ Renalware.FeedOnlyInputs = (function() {
4
+ // Disable any input/textarea/selects having a data attribute suggesting it is controlled by an
5
+ // external feed. The data in these inouts can be overwritten by the feed at any time so it
6
+ // makes sense not to allow user input.
7
+ // Note that this js file is only re-parsed when it changes, so if you change the value of
8
+ // e.g. disable_inputs_controlled_by_tissue_typing_feed in an initializer, it will not
9
+ // take affect until you clear the assets, or make a change to this file etc.
10
+ var disableFeedOnlyInputs = function() {
11
+ <% if Renalware.config.disable_inputs_controlled_by_tissue_typing_feed %>
12
+ $("input,textarea,select").filter("[data-controlled-by-tissue-typing-feed]").prop("disabled", true);
13
+ <% end %>
14
+ <% if Renalware.config.disable_inputs_controlled_by_demographics_feed %>
15
+ $("input,textarea,select").filter("[data-controlled-by-demographics-feed]").prop("disabled", true);
16
+ <% end %>
17
+ };
18
+
19
+ return {
20
+ init: function () {
21
+ disableFeedOnlyInputs();
22
+ }
23
+ };
24
+ }());
25
+
26
+ $(document).ready(Renalware.FeedOnlyInputs.init);
@@ -0,0 +1,50 @@
1
+ $(document).ready(function(){
2
+ $(".hl7-file-browser a").on("click", function(e) {
3
+ console.log($(this).data("body"));
4
+ $("#feeds_hl7_test_form_body").val($(this).data("body"))
5
+ });
6
+
7
+ // $(".file-viewer form").on("submit", function(event) {
8
+ // console.log("asassas");
9
+ // event.preventDefault();
10
+ // console.log(this)
11
+
12
+ // var valuesToSubmit = this.el.serialize();
13
+ // var self = this;
14
+ // //#url: self.el.attr("action"), //submits it to the given url of the form
15
+
16
+ // $.ajax({
17
+ // type: "POST",
18
+ // data: valuesToSubmit,
19
+ // dataType: "JSON",
20
+ // statusCode: {
21
+ // 201: function(contact) {
22
+ // // self._onSuccess(contact);
23
+ // console.log("asass")
24
+ // },
25
+ // 400: function(jqXHR) {
26
+ // var errors = jqXHR.responseJSON;
27
+ // // self._onErrors(errors);
28
+ // console.log("error")
29
+ // }
30
+ // }
31
+ // });
32
+ // });
33
+
34
+ // this.el.on("submit", function(event) { self._onSubmit(event) });
35
+ // $.ajax({
36
+ // type: "POST",
37
+ // url: self.el.attr("action"), //submits it to the given url of the form
38
+ // data: valuesToSubmit,
39
+ // dataType: "JSON",
40
+ // statusCode: {
41
+ // 201: function(contact) {
42
+ // self._onSuccess(contact);
43
+ // },
44
+ // 400: function(jqXHR) {
45
+ // var errors = jqXHR.responseJSON;
46
+ // self._onErrors(errors);
47
+ // }
48
+ // }
49
+ // });
50
+ });
@@ -0,0 +1,43 @@
1
+ var Renalware = typeof Renalware === 'undefined' ? {} : Renalware;
2
+
3
+ Renalware.PersonSearch = (function() {
4
+
5
+ var initPersonSearch = function(){
6
+ var dropDown = $(".person-ajax-search");
7
+
8
+ $(dropDown).select2({
9
+ language: {
10
+ inputTooShort: function(args) {
11
+ return $(dropDown).data("hint");
12
+ }
13
+ },
14
+ ajax: {
15
+ dataType: 'json',
16
+ delay: 250,
17
+ data: function (params) {
18
+ return {
19
+ term: params.term
20
+ };
21
+ },
22
+ processResults: function (data, params) {
23
+ return {
24
+ results: data
25
+ };
26
+ },
27
+ cache: true
28
+ },
29
+ minimumInputLength: 2
30
+ });
31
+ };
32
+
33
+ return {
34
+ init: function () {
35
+ initPersonSearch()
36
+ }
37
+ };
38
+ }());
39
+
40
+ $(document).ready(Renalware.PersonSearch.init);
41
+ $(document).on('opened.fndtn.reveal', '[data-reveal]', function() {
42
+ Renalware.PersonSearch.init();
43
+ });
@@ -1,6 +1,5 @@
1
1
  /*
2
2
  *= require jquery-ui/core
3
- *= require jquery-ui/autocomplete
4
3
  *= require jquery-ui/sortable
5
4
  *= require jquery-ui/tabs
6
5
  *= require_self
@@ -0,0 +1,7 @@
1
+ .hl7-file-browser {
2
+ .file-viewer {
3
+ textarea {
4
+ height: 30rem;
5
+ }
6
+ }
7
+ }
@@ -138,5 +138,5 @@ table#observations {
138
138
  }
139
139
 
140
140
  #observation-requests {
141
- height: 30em;
141
+ height: auto;
142
142
  }
@@ -436,3 +436,9 @@ form {
436
436
  }
437
437
  }
438
438
  }
439
+
440
+ .add-patient-from-master-index {
441
+ table td a {
442
+ margin: 0;
443
+ }
444
+ }
@@ -167,8 +167,8 @@
167
167
  }
168
168
  }
169
169
 
170
- .insert-snippet-button,
171
- .editor-toolbar-button {
170
+ a.insert-snippet-button,
171
+ a.editor-toolbar-button {
172
172
  margin-bottom: 5px !important;
173
173
  margin-left: 1rem;
174
174
  padding: 5px 8px;
@@ -174,7 +174,7 @@ article {
174
174
  span {
175
175
  color: $mid-grey;
176
176
  font-size: 1.1rem;
177
- line-height: 1.78rem;
177
+ // line-height: 1.78rem;
178
178
  margin: 0 .5rem 0 0;
179
179
  }
180
180
 
@@ -475,3 +475,7 @@ legend .legend-note {
475
475
  font-size: .9rem;
476
476
  color: $steel;
477
477
  }
478
+
479
+ .page-action-inline-form form {
480
+ display: inline-block;
481
+ }
@@ -10,6 +10,10 @@ body {
10
10
  height: 100%;
11
11
  }
12
12
 
13
+ body.staging {
14
+ border-top: 3px solid $nhs-yellow;
15
+ }
16
+
13
17
  html {
14
18
  body {
15
19
  display: flex;
@@ -0,0 +1,7 @@
1
+ ul.side-nav
2
+ = render "renalware/patients/side_menu/general", patient: patient
3
+ = render "renalware/patients/side_menu/site_specific_links", patient: patient
4
+ = render "renalware/patients/side_menu/modalities", patient: patient
5
+ = render "renalware/patients/side_menu/transplants", patient: patient
6
+ = render "renalware/patients/side_menu/actions", patient: patient
7
+ = render "renalware/patients/side_menu/site_specific_actions", patient: patient
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Renalware
4
+ module Patients
5
+ # Experimental ActionView component
6
+ class SideMenuComponent < ActionView::Component::Base
7
+ validates :patient, presence: true
8
+
9
+ def initialize(patient:)
10
+ @patient = patient
11
+ end
12
+
13
+ private
14
+
15
+ attr_reader :patient
16
+ end
17
+ end
18
+ end
@@ -6,8 +6,14 @@ require_dependency "renalware/clinical"
6
6
  module Renalware
7
7
  module Clinical
8
8
  class BodyCompositionsController < Clinical::BaseController
9
+ include Renalware::Concerns::Pageable
9
10
  before_action :load_patient
10
11
 
12
+ def index
13
+ body_compositions = BodyComposition.for_patient(patient).ordered.page(page).per(per_page)
14
+ render locals: { patient: patient, body_compositions: body_compositions }
15
+ end
16
+
11
17
  def show
12
18
  body_composition = find_body_composition
13
19
  render locals: { patient: patient, body_composition: body_composition }
@@ -0,0 +1,59 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_dependency "renalware/admin"
4
+
5
+ module Renalware
6
+ module Feeds
7
+ class HL7TestMessagesController < BaseController
8
+ def new
9
+ authorize [:renalware, :admin, :devops], :show?
10
+ test_messages = HL7TestMessage.all
11
+ render locals: { form: HL7TestForm.new, test_messages: test_messages }
12
+ end
13
+
14
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
15
+ def create
16
+ authorize [:renalware, :admin, :devops], :create?
17
+ body = replace_placeholders_in_hl7_message(form_params[:body])
18
+ job = FeedJob.new(body)
19
+ job.perform
20
+ test_patient
21
+ version = test_patient.reload.versions.order(created_at: :desc).last&.object_changes
22
+ json_version = version && JSON.pretty_generate(version)
23
+ respond_to do |format|
24
+ format.js do
25
+ render locals: {
26
+ a: "asas",
27
+ test_patient: test_patient,
28
+ version: json_version
29
+ }
30
+ end
31
+ end
32
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength
33
+
34
+ # # Delayed::Job.enqueue job
35
+ # redirect_to(
36
+ # renalware.new_feeds_hl7_test_message_path,
37
+ # notice: "Hl7 message queued"
38
+ # )
39
+ end
40
+
41
+ private
42
+
43
+ def form_params
44
+ params.require(:feeds_hl7_test_form).permit(:body)
45
+ end
46
+
47
+ def test_patient
48
+ @test_patient ||= Patient.find_by!(local_patient_id: "Z100001")
49
+ end
50
+
51
+ def replace_placeholders_in_hl7_message(message)
52
+ message
53
+ .gsub("{{message_id}}", SecureRandom.hex(12))
54
+ .gsub("{{local_patient_id}}", test_patient.local_patient_id)
55
+ .gsub("\r\n", "\r")
56
+ end
57
+ end
58
+ end
59
+ end
@@ -50,11 +50,6 @@ module Renalware
50
50
  params[:named_filter]
51
51
  end
52
52
 
53
- def batch_print_form
54
- patient_ids = query.call.pluck("patients.id").join(",")
55
- SessionForms::Form.new(patient_ids: patient_ids)
56
- end
57
-
58
53
  def render_index(filter_form:, **args)
59
54
  presenter = build_presenter(params: params, **args)
60
55
  authorize presenter.patients
@@ -63,10 +58,25 @@ module Renalware
63
58
  locals: {
64
59
  presenter: presenter,
65
60
  filter_form: filter_form,
66
- batch_print_form: batch_print_form
61
+ batch_print_form: batch_print_form,
62
+ pathology_requests_form: pathology_requests_form
67
63
  }
68
64
  )
69
65
  end
66
+
67
+ # Form object behind the batch print session forms button
68
+ def batch_print_form
69
+ SessionForms::Form.new(patient_ids: patient_ids)
70
+ end
71
+
72
+ # Form object behind the 'generate request forms' button
73
+ def pathology_requests_form
74
+ OpenStruct.new(patient_ids: patient_ids)
75
+ end
76
+
77
+ def patient_ids
78
+ @patient_ids ||= query.call.pluck("patients.id")
79
+ end
70
80
  end
71
81
  end
72
82
  end
@@ -0,0 +1,91 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_dependency "renalware/hd/base_controller"
4
+
5
+ # The route to the edit route for this controller takes /:year/:week_number segments
6
+ # rather than an id. THat is because when we load the diary, and when we navigate back and forth
7
+ # through diaries, we are concerned with the week more then an id. Its easier to navigate to the
8
+ # next week with /2017/52 than by looking up the id of the next diary ahead of time.
9
+ module Renalware
10
+ module HD
11
+ module Scheduling
12
+ class DiariesController < BaseController
13
+ include Renalware::Concerns::PdfRenderable
14
+ include Renalware::Concerns::Pageable
15
+
16
+ def edit
17
+ authorize weekly_diary, :show?
18
+ render locals: {
19
+ unit: unit,
20
+ diary: DiaryPresenter.new(current_user, weekly_diary)
21
+ }
22
+ end
23
+
24
+ # Renders a list of diaries for a hospital unit
25
+ def index
26
+ authorize WeeklyDiary, :index?
27
+ render locals: { unit: unit, diaries: weekly_diaries }
28
+ end
29
+
30
+ def show
31
+ diary = WeeklyDiary.find(params[:id])
32
+ respond_to do |format|
33
+ format.pdf do
34
+ authorize diary
35
+ options = default_pdf_options.merge!(
36
+ pdf: pdf_filename,
37
+ locals: { unit: unit, diary: DiaryPresenter.new(current_user, diary) }
38
+ )
39
+ render options
40
+ end
41
+ end
42
+ end
43
+
44
+ private
45
+
46
+ # TODO: give a sensible name
47
+ def pdf_filename
48
+ "hd_unit_diary"
49
+ end
50
+
51
+ def weekly_diary
52
+ @weekly_diary ||= begin
53
+ FindOrCreateDiaryByWeekQuery.new(
54
+ relation: WeeklyDiary.eager_load(
55
+ slots: [:patient, :station, :diurnal_period_code],
56
+ master_diary: { slots: [:patient, :station, :diurnal_period_code] }
57
+ ),
58
+ unit_id: unit_id,
59
+ week_period: week_period,
60
+ by: current_user
61
+ ).call
62
+ end
63
+ end
64
+
65
+ # The route segments are /:year/:week_number
66
+ # We use a WeekPeriod value object to wrap those two things.
67
+ def week_period
68
+ WeekPeriod.new(
69
+ week_number: params[:week_number],
70
+ year: params[:year]
71
+ )
72
+ end
73
+
74
+ def unit_id
75
+ params[:unit_id]
76
+ end
77
+
78
+ def unit
79
+ Hospitals::Unit.find(unit_id)
80
+ end
81
+
82
+ def weekly_diaries
83
+ WeeklyDiary
84
+ .where(hospital_unit_id: unit_id)
85
+ .ordered
86
+ .page(page).per(per_page)
87
+ end
88
+ end
89
+ end
90
+ end
91
+ end