renalware-core 2.0.151 → 2.0.157

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/renalware/components/navigation.js +0 -7
  3. data/app/assets/javascripts/renalware/components/sortable.js +3 -0
  4. data/app/assets/javascripts/renalware/core.js.erb +0 -2
  5. data/app/assets/javascripts/renalware/rollup_compiled.css +69147 -50289
  6. data/app/assets/javascripts/renalware/rollup_compiled.js +10 -14
  7. data/app/assets/stylesheets/renalware/base/_variables.scss +1 -0
  8. data/app/assets/stylesheets/renalware/lib/_foundation_and_overrides.scss +1 -620
  9. data/app/assets/stylesheets/renalware/lib/_select2-foundation5-overrides.scss +1 -1
  10. data/app/assets/stylesheets/renalware/modules/_medications.scss +9 -9
  11. data/app/assets/stylesheets/renalware/modules/_patients.scss +4 -0
  12. data/app/assets/stylesheets/renalware/modules/_users.scss +2 -1
  13. data/app/assets/stylesheets/renalware/partials/_forms.scss +11 -0
  14. data/app/assets/stylesheets/renalware/partials/_navigation.scss +15 -12
  15. data/app/assets/stylesheets/renalware/partials/_simple_form.scss +1 -1
  16. data/app/assets/stylesheets/renalware/partials/_tables.scss +15 -8
  17. data/app/assets/stylesheets/renalware/partials/_toggle.scss +0 -66
  18. data/app/assets/stylesheets/renalware/partials/_toggling.scss +18 -0
  19. data/app/assets/stylesheets/renalware/partials/_trix.scss +12 -0
  20. data/app/components/renalware/admissions/active_consult_alert_component.html.slim +4 -0
  21. data/app/components/renalware/admissions/active_consult_alert_component.rb +25 -0
  22. data/app/components/renalware/article_component.html.slim +5 -0
  23. data/app/components/renalware/article_component.rb +12 -0
  24. data/app/components/renalware/events/event_list_component.rb +6 -1
  25. data/app/components/renalware/medications/tabbed_prescriptions_list_component.html.slim +41 -0
  26. data/app/components/renalware/medications/tabbed_prescriptions_list_component.rb +47 -0
  27. data/app/components/renalware/patients/messages_component.html.slim +45 -0
  28. data/app/components/renalware/patients/messages_component.rb +52 -0
  29. data/app/components/renalware/pd/adequacy_results_component.html.slim +3 -5
  30. data/app/components/renalware/system/admin_menu_component.html.slim +3 -1
  31. data/app/components/renalware/users/last_signin_component.html.slim +3 -0
  32. data/app/components/renalware/users/last_signin_component.rb +23 -0
  33. data/app/controllers/renalware/admin/playgrounds_controller.rb +1 -1
  34. data/app/controllers/renalware/admin/users_controller.rb +1 -0
  35. data/app/controllers/renalware/drugs/drugs_controller.rb +4 -0
  36. data/app/controllers/renalware/hd/historical_profiles_controller.rb +1 -1
  37. data/app/controllers/renalware/medications/prescriptions_controller.rb +5 -2
  38. data/app/controllers/renalware/messaging/internal/messages_controller.rb +14 -5
  39. data/app/controllers/renalware/pathology/observation_descriptions_controller.rb +58 -0
  40. data/app/controllers/renalware/patients/mdms_controller.rb +104 -0
  41. data/app/controllers/renalware/system/view_metadata_controller.rb +61 -0
  42. data/app/controllers/renalware/users_controller.rb +25 -0
  43. data/app/helpers/renalware/application_helper.rb +2 -1
  44. data/app/helpers/renalware/drugs_helper.rb +6 -0
  45. data/app/helpers/renalware/layout_helper.rb +1 -1
  46. data/app/models/concerns/renalware/sortable.rb +49 -0
  47. data/app/models/renalware/accesses/patient.rb +2 -2
  48. data/app/models/renalware/accesses/plan.rb +1 -1
  49. data/app/models/renalware/admissions/request.rb +1 -0
  50. data/app/models/renalware/clinical/body_composition.rb +1 -1
  51. data/app/models/renalware/clinical/dry_weight.rb +1 -1
  52. data/app/models/renalware/clinics/clinic_visit.rb +5 -4
  53. data/app/models/renalware/feeds/files/create_feed_file.rb +1 -1
  54. data/app/models/renalware/hd/patient.rb +1 -1
  55. data/app/models/renalware/hd/preference_set.rb +1 -1
  56. data/app/models/renalware/hd/profile.rb +4 -4
  57. data/app/models/renalware/hd/schedule_definition.rb +1 -1
  58. data/app/models/renalware/hd/session.rb +2 -2
  59. data/app/models/renalware/hd/session_forms/batch_compile_pdfs.rb +1 -1
  60. data/app/models/renalware/hd/station.rb +2 -1
  61. data/app/models/renalware/letters/description.rb +2 -0
  62. data/app/models/renalware/letters/letter.rb +1 -1
  63. data/app/models/renalware/letters/part/prescriptions.rb +12 -3
  64. data/app/models/renalware/letters/pdf_letter_cache.rb +1 -1
  65. data/app/models/renalware/letters/printing/batch_compile_pdfs.rb +1 -1
  66. data/app/models/renalware/letters/recipient_params_processor.rb +1 -1
  67. data/app/models/renalware/medications/prescription.rb +0 -4
  68. data/app/models/renalware/messaging/internal/message_form.rb +1 -0
  69. data/app/models/renalware/messaging/internal/message_form_builder.rb +2 -1
  70. data/app/models/renalware/pathology/current_observations_for_descriptions_query.rb +3 -3
  71. data/app/models/renalware/pathology/measurement_unit.rb +13 -0
  72. data/app/models/renalware/pathology/observation_description.rb +23 -5
  73. data/app/models/renalware/pathology/observation_descriptions_by_code_query.rb +1 -1
  74. data/app/models/renalware/pathology/observation_requests_attributes_builder.rb +45 -5
  75. data/app/models/renalware/pathology/observations_within_date_range_query.rb +1 -1
  76. data/app/models/renalware/patient.rb +2 -2
  77. data/app/models/renalware/patients/bookmark.rb +2 -2
  78. data/app/models/renalware/patients/mdm_menu.rb +41 -0
  79. data/app/models/renalware/patients/mdm_patients_query.rb +1 -1
  80. data/app/models/renalware/patients/search_query.rb +1 -1
  81. data/app/models/renalware/patients/worry.rb +0 -1
  82. data/app/models/renalware/pd/mdm_patients_query.rb +1 -1
  83. data/app/models/renalware/problems/problem.rb +2 -1
  84. data/app/models/renalware/snippets/snippet_query.rb +1 -1
  85. data/app/models/renalware/surveys/question.rb +1 -2
  86. data/app/models/renalware/system/column_definition.rb +43 -0
  87. data/app/models/renalware/system/filter_definition.rb +29 -0
  88. data/app/models/renalware/system/update_user.rb +5 -0
  89. data/app/models/renalware/system/version.rb +11 -0
  90. data/app/models/renalware/system/view_metadata.rb +25 -0
  91. data/app/models/renalware/transplants/donation.rb +1 -1
  92. data/app/models/renalware/transplants/donor_followup.rb +0 -1
  93. data/app/models/renalware/transplants/failure_cause_description.rb +1 -1
  94. data/app/models/renalware/transplants/mdm_patients_query.rb +2 -2
  95. data/app/models/renalware/transplants/patient.rb +1 -1
  96. data/app/models/renalware/transplants/recipient_followup.rb +1 -3
  97. data/app/models/renalware/transplants/registration.rb +1 -3
  98. data/app/models/renalware/transplants/registrations/wait_list_query.rb +4 -4
  99. data/app/models/renalware/ukrdc/measurement_unit.rb +21 -0
  100. data/app/models/renalware/ukrdc/outgoing/rendering/lab_order.rb +30 -2
  101. data/app/models/renalware/ukrdc/paths.rb +1 -1
  102. data/app/models/renalware/ukrdc/treatment_timeline/prepare_tables.rb +1 -1
  103. data/app/models/renalware/ukrdc/treatment_timeline/remap_model_table_names_to_their_prepared_equivalents.rb +1 -1
  104. data/app/policies/application_policy.rb +1 -1
  105. data/app/policies/renalware/medications/prescription_policy.rb +35 -0
  106. data/app/policies/renalware/system/view_metadata_policy.rb +17 -0
  107. data/app/presenters/concerns/renalware/accountable_presentation.rb +33 -0
  108. data/app/presenters/renalware/clinics/visit_presenter.rb +11 -0
  109. data/app/presenters/renalware/events/event_presenter.rb +11 -0
  110. data/app/presenters/renalware/mdm_presenter.rb +11 -0
  111. data/app/presenters/renalware/pathology/results_presenter.rb +1 -2
  112. data/app/presenters/renalware/renal/clinical_summary_presenter.rb +9 -6
  113. data/app/views/renalware/admin/playgrounds/show.html.slim +2 -6
  114. data/app/views/renalware/admin/users/edit.html.slim +9 -0
  115. data/app/views/renalware/admin/users/index.html.slim +6 -0
  116. data/app/views/renalware/admissions/admissions/_filters.html.slim +8 -16
  117. data/app/views/renalware/clinical/allergies/_list.html.slim +3 -1
  118. data/app/views/renalware/dashboard/dashboards/show.html.slim +1 -0
  119. data/app/views/renalware/hd/protocols/_virology.html.slim +4 -5
  120. data/app/views/renalware/letters/letters/_form.html.slim +1 -1
  121. data/app/views/renalware/letters/parts/_prescriptions.html.slim +4 -0
  122. data/app/views/renalware/mdm/_prescriptions.html.slim +4 -13
  123. data/app/views/renalware/mdm/prescriptions/_table.html.slim +3 -1
  124. data/app/views/renalware/medications/prescriptions/_current_hd.html.slim +13 -0
  125. data/app/views/renalware/medications/prescriptions/_filter_form.html.slim +26 -13
  126. data/app/views/renalware/medications/prescriptions/_form.html.slim +3 -2
  127. data/app/views/renalware/medications/prescriptions/_options.html.slim +3 -3
  128. data/app/views/renalware/medications/prescriptions/_table.html.slim +5 -4
  129. data/app/views/renalware/medications/prescriptions/_tables.html.slim +13 -16
  130. data/app/views/renalware/medications/prescriptions/index.html.slim +5 -4
  131. data/app/views/renalware/messaging/internal/messages/_form.html.slim +3 -0
  132. data/app/views/renalware/messaging/internal/messages/index.html.slim +36 -0
  133. data/app/views/renalware/navigation/_mdms.html.slim +5 -0
  134. data/app/views/renalware/navigation/_renal.html.slim +1 -0
  135. data/app/views/renalware/navigation/{_super_admin.html.slim → _super_admin.html.slim.dead} +0 -0
  136. data/app/views/renalware/pathology/code_groups/edit.html.slim +5 -5
  137. data/app/views/renalware/pathology/code_groups/index.html.slim +4 -5
  138. data/app/views/renalware/pathology/code_groups/show.html.slim +25 -26
  139. data/app/views/renalware/pathology/observation_descriptions/_filters.html.slim +14 -0
  140. data/app/views/renalware/pathology/observation_descriptions/edit.html.slim +21 -0
  141. data/app/views/renalware/pathology/observation_descriptions/index.html.slim +38 -0
  142. data/app/views/renalware/pathology/requests/requests/request_form/_crs_form.html.slim +1 -1
  143. data/app/views/renalware/patients/alerts/_list.html.slim +1 -0
  144. data/app/views/renalware/patients/mdms/_filters.html.slim +38 -0
  145. data/app/views/renalware/patients/mdms/_table.html.slim +72 -0
  146. data/app/views/renalware/patients/mdms/show.html.slim +18 -0
  147. data/app/views/renalware/patients/side_menu/_general.html.slim +4 -0
  148. data/app/views/renalware/patients/worryboard/_filters.html.slim +18 -13
  149. data/app/views/renalware/pd/_peritonitis_episodes.html.slim +13 -13
  150. data/app/views/renalware/pd/adequacy_results/_form_fields.html.slim +1 -1
  151. data/app/views/renalware/pd/adequacy_results/_table.html.slim +2 -2
  152. data/app/views/renalware/pd/dashboards/show.html.slim +3 -3
  153. data/app/views/renalware/pd/dashboards/show/_page_actions.html.slim +9 -16
  154. data/app/views/renalware/pd/dashboards/show/_pet_adequacies.html.slim +1 -1
  155. data/app/views/renalware/pd/peritonitis_episodes/show.html.slim +8 -6
  156. data/app/views/renalware/shared/_fieldset.html.slim +1 -2
  157. data/app/views/renalware/shared/_magellan_block.html.slim +1 -2
  158. data/app/views/renalware/system/view_metadata/_columns_table.html.slim +44 -0
  159. data/app/views/renalware/system/view_metadata/_filters_form.html.slim +19 -0
  160. data/app/views/renalware/system/view_metadata/_versions.html.slim +23 -0
  161. data/app/views/renalware/system/view_metadata/edit.html.slim +66 -0
  162. data/app/views/renalware/transplants/mdm/_prescriptions.html.slim +6 -22
  163. data/app/views/renalware/users/_filters.html.slim +11 -0
  164. data/app/views/renalware/users/index.html.slim +24 -0
  165. data/config/initializers/core_extensions.rb +2 -2
  166. data/config/initializers/delayed_job.rb +1 -1
  167. data/config/initializers/inflections.rb +1 -0
  168. data/config/initializers/pagy.rb +5 -0
  169. data/config/locales/renalware/clinical/allergies.en.yml +1 -0
  170. data/config/locales/renalware/medications/tabbed_prescriptions_list_component.yml +15 -0
  171. data/config/locales/renalware/navigation/renal.en.yml +1 -0
  172. data/config/locales/renalware/patients/side_menu.en.yml +1 -0
  173. data/config/permissions.yml +1 -0
  174. data/config/routes.rb +1 -0
  175. data/config/routes/messaging.rb +9 -1
  176. data/config/routes/pathology.rb +1 -0
  177. data/config/routes/patients.rb +1 -0
  178. data/config/routes/system.rb +3 -0
  179. data/config/routes/users.rb +3 -0
  180. data/db/functions/convert_to_float_with_explicit_return_v01.sql +18 -0
  181. data/db/functions/update_current_observation_set_from_trigger_v05.sql +92 -0
  182. data/db/functions/update_pathology_observations_nresult_from_trigger_v01.sql +13 -0
  183. data/db/migrate/20200122182018_update_patient_current_modalities.rb +7 -0
  184. data/db/migrate/20200122182036_create_transplant_mdm_patients.rb +7 -0
  185. data/db/migrate/20200122190909_create_view_metadata.rb +44 -0
  186. data/db/migrate/20200131133223_create_hd_mdm_patients.rb +7 -0
  187. data/db/migrate/20200205185151_add_columns_to_system_view_metadata.rb +13 -0
  188. data/db/migrate/20200219113324_create_supportive_care_mdm_patients_view.rb +7 -0
  189. data/db/migrate/20200226145010_add_unique_indexes.rb +12 -11
  190. data/db/migrate/20200622120232_add_limits_to_path_obs_descriptions.rb +18 -0
  191. data/db/migrate/20200626081248_overload_convert_to_float_function.rb +13 -0
  192. data/db/migrate/20200626090256_add_nresult_to_pathology_observations.rb +29 -0
  193. data/db/migrate/20200628094228_add_prescriber_to_users.rb +14 -0
  194. data/db/migrate/20200812074223_add_public_flag_to_messages.rb +18 -0
  195. data/db/migrate/20200815150303_create_system_versions.rb +16 -0
  196. data/db/migrate/20200817085618_create_pd_mdm_patients.rb +7 -0
  197. data/db/migrate/20200817103930_create_low_clearance_mdm_patients.rb +7 -0
  198. data/db/migrate/20201001144512_update_fn_update_current_obs_set_triggerv05.rb +13 -0
  199. data/db/migrate/20201001145452_add_position_to_letter_descriptions.rb +5 -0
  200. data/db/migrate/20201009090959_make_drug_types_unique.rb +8 -0
  201. data/db/migrate/20201012160414_add_suggested_measurement_unit_to_pathology_observation_descriptions.rb +18 -0
  202. data/db/migrate/20201012171428_create_ukrdc_measurement_units.rb +18 -0
  203. data/db/migrate/20201015160542_add_position_to_drug_types.rb +31 -0
  204. data/db/migrate/20201020155510_add_bmi_to_clinic_visits.rb +31 -0
  205. data/db/migrate/20201020164524_update_pd_mdm_patients_view.rb +7 -0
  206. data/db/migrate/20201020170921_update_hd_mdm_patients_view.rb +7 -0
  207. data/db/migrate/20201020171139_update_low_clearance_mdm_patients_view.rb +7 -0
  208. data/db/migrate/20201021153832_update_supportive_care_mdm_patients_view.rb +7 -0
  209. data/db/migrate/20201021154809_update_transplant_mdm_patients_view.rb +7 -0
  210. data/db/migrate/20201023092859_remove_unused_indexes.rb +20 -0
  211. data/db/seeds/default/system/seeds.rb +1 -0
  212. data/db/seeds/default/system/view_metadata.rb +91 -0
  213. data/db/seeds/default/ukrdc/measurement_units.csv +12 -0
  214. data/db/seeds/default/ukrdc/measurement_units.rb +15 -0
  215. data/db/seeds/default/ukrdc/seeds.rb +1 -0
  216. data/db/triggers/update_pathology_observations_nresult_trigger_v01.sql +11 -0
  217. data/db/views/hd_mdm_patients_v01.sql +69 -0
  218. data/db/views/hd_mdm_patients_v02.sql +70 -0
  219. data/db/views/low_clearance_mdm_patients_v01.sql +38 -0
  220. data/db/views/low_clearance_mdm_patients_v02.sql +39 -0
  221. data/db/views/patient_current_modalities_v02.sql +18 -0
  222. data/db/views/pd_mdm_patients_v01.sql +42 -0
  223. data/db/views/pd_mdm_patients_v02.sql +43 -0
  224. data/db/views/supportive_care_mdm_patients_v01.sql +28 -0
  225. data/db/views/supportive_care_mdm_patients_v02.sql +29 -0
  226. data/db/views/transplant_mdm_patients_v01.sql +46 -0
  227. data/db/views/transplant_mdm_patients_v02.sql +47 -0
  228. data/lib/renalware/configuration.rb +2 -0
  229. data/lib/renalware/engine.rb +2 -2
  230. data/lib/renalware/version_number.rb +1 -2
  231. data/lib/tasks/db.rake +9 -0
  232. data/lib/tasks/pd.rake +28 -0
  233. data/spec/factories/drugs/drug_types.rb +5 -1
  234. data/spec/factories/messaging/internal/messages.rb +1 -0
  235. data/spec/factories/patients/practices.rb +1 -1
  236. data/spec/factories/patients/primary_care_physicians.rb +1 -1
  237. data/spec/factories/system/users.rb +1 -0
  238. data/spec/factories/system/view_metadata.rb +20 -0
  239. data/spec/support/capybara_helper.rb +2 -4
  240. data/spec/support/letters_spec_helper.rb +1 -1
  241. data/spec/support/matchers/validate_timeliness_of.rb +1 -1
  242. data/spec/support/pathology_spec_helper.rb +1 -2
  243. data/spec/support/policy_spec_helper.rb +12 -0
  244. data/vendor/assets/javascripts/foundation/foundation.alert.js +43 -0
  245. data/vendor/assets/javascripts/foundation/foundation.dropdown.js +468 -0
  246. data/vendor/assets/javascripts/foundation/foundation.js +727 -0
  247. data/vendor/assets/javascripts/foundation/foundation.reveal.js +522 -0
  248. data/vendor/assets/javascripts/foundation/foundation.tab.js +247 -0
  249. data/vendor/assets/javascripts/foundation/foundation.tooltip.js +348 -0
  250. data/vendor/assets/javascripts/foundation/foundation.topbar.js +458 -0
  251. data/vendor/assets/stylesheets/foundation/_functions.scss +156 -0
  252. data/vendor/assets/stylesheets/foundation/components/_alert-boxes.scss +128 -0
  253. data/vendor/assets/stylesheets/foundation/components/_buttons.scss +261 -0
  254. data/vendor/assets/stylesheets/foundation/components/_dropdown-buttons.scss +130 -0
  255. data/vendor/assets/stylesheets/foundation/components/_dropdown.scss +269 -0
  256. data/vendor/assets/stylesheets/foundation/components/_forms.scss +601 -0
  257. data/vendor/assets/stylesheets/foundation/components/_global.scss +566 -0
  258. data/vendor/assets/stylesheets/foundation/components/_grid.scss +292 -0
  259. data/vendor/assets/stylesheets/foundation/components/_labels.scss +106 -0
  260. data/vendor/assets/stylesheets/foundation/components/_pagination.scss +163 -0
  261. data/vendor/assets/stylesheets/foundation/components/_panels.scss +107 -0
  262. data/vendor/assets/stylesheets/foundation/components/_reveal.scss +212 -0
  263. data/vendor/assets/stylesheets/foundation/components/_side-nav.scss +120 -0
  264. data/vendor/assets/stylesheets/foundation/components/_split-buttons.scss +203 -0
  265. data/vendor/assets/stylesheets/foundation/components/_sub-nav.scss +125 -0
  266. data/vendor/assets/stylesheets/foundation/components/_tables.scss +135 -0
  267. data/vendor/assets/stylesheets/foundation/components/_tabs.scss +142 -0
  268. data/vendor/assets/stylesheets/foundation/components/_tooltips.scss +142 -0
  269. data/vendor/assets/stylesheets/foundation/components/_top-bar.scss +745 -0
  270. data/vendor/assets/stylesheets/foundation/components/_type.scss +525 -0
  271. data/vendor/assets/stylesheets/foundation/components/_visibility.scss +425 -0
  272. metadata +162 -64
  273. data/app/views/renalware/pd/infection_organisms/_edit.html.slim.obsolete +0 -16
  274. data/app/views/renalware/transplants/donor_operations/_sections_nav.html.slim +0 -11
  275. data/app/views/renalware/transplants/donor_workups/_sections_nav.html.slim +0 -15
  276. data/app/views/renalware/transplants/recipient_operations/_sections_nav.html.slim +0 -14
  277. data/app/views/renalware/transplants/recipient_workups/_sections_nav.html.slim +0 -15
  278. data/lib/core_extensions/active_record/sort.rb +0 -52
  279. data/spec/support/pages/accesses/procedure_page.rb +0 -53
  280. data/spec/support/pages/accesses/profile_page.rb +0 -45
  281. data/spec/support/pages/admissions/consults_page.rb +0 -26
  282. data/spec/support/pages/clinical/allergy_page.rb +0 -74
  283. data/spec/support/pages/clinical/profile_page.rb +0 -28
  284. data/spec/support/pages/hd/prescription_administration_dialog.rb +0 -132
  285. data/spec/support/pages/letters/form.rb +0 -63
  286. data/spec/support/pages/letters/mailshots/form.rb +0 -58
  287. data/spec/support/pages/letters/patient_letters.rb +0 -20
  288. data/spec/support/pages/low_clearance/profile_page.rb +0 -70
  289. data/spec/support/pages/medications/home_delivery_dialog.rb +0 -77
  290. data/spec/support/pages/medications/prescription_fom.rb +0 -62
  291. data/spec/support/pages/page_object.rb +0 -10
@@ -0,0 +1,19 @@
1
+ .rounded-md.bg-orange-200.px-3.py-2.flex.items-start.shadow.mx-1.mb-5
2
+ i.fas.fa-info-circle.mr-2.mt-1.text-blue-500
3
+ | Editing filters is not possible yet
4
+
5
+ table
6
+ thead
7
+ th SQL column name
8
+ th Filter type
9
+ tbody
10
+ - view.filters.each do |filter|
11
+ tr
12
+ td.border-0
13
+ code= filter.code
14
+ td.border-0
15
+ = filter.type
16
+ / select.m-0(name="view_metadata[filters][][1]")
17
+ / option(value="")
18
+ / - Renalware::System::ColumnDefinition.new.width_values.each do |val, x|
19
+ / option(value=val selected=(col.width == val.to_s))=val.to_s.humanize filter[1]
@@ -0,0 +1,23 @@
1
+ / Note we can't do vioew.versions.order(...) here
2
+ - versions = view.versions.to_a.sort{ |a, b| b.created_at <=> a.created_at }
3
+ .rounded-md.bg-orange-200.px-3.py-2.flex.items-start.shadow.mx-1.mb-5
4
+ i.fas.fa-info-circle.mr-2.mt-1.text-blue-500
5
+ | Restore column and filter configuration to a point in time.
6
+ | Unsaved column/filter changes will be lost.
7
+ table
8
+ thead
9
+ th.col-width-date-time Last updated
10
+ th.col-width-small Event
11
+ th By
12
+ th
13
+ tbody
14
+ - versions.each do |version|
15
+ tr
16
+ td= l(version.created_at)
17
+ td= version.event
18
+ td= Renalware::User.find(version.whodunnit)
19
+ td.text-right
20
+ = link_to("Restore",
21
+ renalware.restore_system_view_metadatum_path(view, version_at: version.created_at),
22
+ data: { method: :patch },
23
+ class: "button compact secondary")
@@ -0,0 +1,66 @@
1
+
2
+ / To remember
3
+ / We have klass.columns which are the actual SQL view columns
4
+ / We view (view metadata) columns, which is an array of hashes, each representing a column
5
+ / with its title. and width. Its position comes from the position inthe array.
6
+ /
7
+ / Here loop through all avail columns on klass and find the matching
8
+ / col in view.columns. If there are columns we don't recognise (the view config is stale) they
9
+ / will be discarded when we save. If there are new cols we given them an empty object and it will be
10
+ / saved away.
11
+ / We need to handle validation
12
+ / also serialisation - see https://nandovieira.com/using-postgresql-and-jsonb-with-ruby-on-rails
13
+
14
+ ruby:
15
+ # attribute_names = klass.columns.map(&:name) - %w(id secure_id document)
16
+ # view.columns = attribute_names.map do |attr|
17
+ # view.columns.detect{ |col| col.code == attr } || Renalware::System::ColumnDefinition.new(code: attr)
18
+ # end
19
+
20
+ attribute_names = klass.columns.map(&:name) - %w(id secure_id document)
21
+ attribute_names = (view.columns.map(&:code) + attribute_names).uniq
22
+ view.columns = attribute_names.map do |attr|
23
+ view.columns.detect{ |col| col.code == attr } || Renalware::System::ColumnDefinition.new(code: attr)
24
+ end
25
+
26
+ = simple_form_for(view, as: "view_metadata", method: :patch) do |f|
27
+ = f.input :id, as: :hidden
28
+ .modal
29
+ .modal__header
30
+ = render "renalware/shared/modal_close_link"
31
+ - title = [view.category&.humanize, view.scope&.humanize, view.title&.humanize].join(" / ")
32
+ h2= "Edit columns for #{title}"
33
+ .modal__body(style="max-height: 400px")
34
+ .rounded-md.bg-blue-100.px-3.py-2.flex.items-start.shadow.mx-1.mb-5
35
+ i.fas.fa-info-circle.mr-2.mt-1.text-blue-500
36
+ | Please bear in mind that changes you make will be visible by all users.
37
+
38
+ / Tabs - see also js stimulus tabs-controller
39
+ div(data-controller="tabs" data-tabs-active-tab="-mb-px border-l border-t border-r rounded-t")
40
+ ul.list-reset.flex.border-b.ml-0
41
+ li.-mb-px.mr-1(data-target="tabs.tab" data-action="click->tabs#change")
42
+ a.bg-white.inline-block.py-2.px-4.text-blue-500.hover:text-blue-700.font-semibold.no-underline(href="#") Columns
43
+ li.-mb-px.mr-1(data-target="tabs.tab" data-action="click->tabs#change")
44
+ a.bg-white.inline-block.py-2.px-4.text-blue-500.hover:text-blue-700.font-semibold.no-underline(href="#") Filters
45
+ li.-mb-px.mr-1(data-target="tabs.tab" data-action="click->tabs#change")
46
+ a.bg-white.inline-block.py-2.px-4.text-blue-500.hover:text-blue-700.font-semibold.no-underline(href="#") Previous versions
47
+
48
+ .hidden.py-4.px-4.border-l.border-b.border-r(data-target="tabs.panel")
49
+ = render "columns_table", view: view
50
+ .hidden.py-4.px-4.border-l.border-b.border-r(data-target="tabs.panel")
51
+ = render "filters_form", view: view
52
+ .hidden.py-4.px-4.border-l.border-b.border-r(data-target="tabs.panel")
53
+ = render "versions", view: view
54
+
55
+ .modal__footer
56
+ br
57
+ .right
58
+ = f.submit "Save", class: "button"
59
+ span= " or "
60
+ = link_to "Cancel",
61
+ "#",
62
+ "aria-label" => "Close",
63
+ class: "reveal-modal-close"
64
+
65
+ javascript:
66
+ initSortables();
@@ -6,25 +6,9 @@ article
6
6
  = render "prescription_buttons", patient: mdm.patient
7
7
 
8
8
  #prescriptions.expandable
9
-
10
- ul.tab-strip(data-tab)
11
- li.tab-title.active= link_to "Current", "#current", data: { "trigger-masonry-refresh" => true }
12
- li.tab-title= link_to "Current Immunosuppressant", "#current_immunosuppressant", data: { "trigger-masonry-refresh" => true }
13
- li.tab-title= link_to "Historical", "#historical", data: { "trigger-masonry-refresh" => true }
14
- li.tab-title= link_to "Historical Immunosuppressant", "#historical_immunosuppressant", data: { "trigger-masonry-refresh" => true }
15
-
16
- .tabs-content
17
- #current.content.active
18
- = render "renalware/mdm/prescriptions/table",
19
- prescriptions: mdm.current_prescriptions
20
- #current_immunosuppressant.content
21
- = render "renalware/mdm/prescriptions/table",
22
- prescriptions: mdm.current_immunosuppressant_prescriptions
23
- #historical.content
24
- = render "renalware/mdm/prescriptions/table",
25
- prescriptions: mdm.historical_prescriptions,
26
- show_terminated_on: true
27
- #historical_immunosuppressant.content
28
- = render "renalware/mdm/prescriptions/table",
29
- prescriptions: mdm.historical_immunosuppressant_prescriptions,
30
- show_terminated_on: true
9
+ = render Renalware::Medications::TabbedPrescriptionsListComponent.new([ \
10
+ { title: "Current", prescriptions: mdm.current_prescriptions, show_terminated_on: false }, \
11
+ { title: "Current Immunosuppressant", prescriptions: mdm.current_immunosuppressant_prescriptions, show_terminated_on: false },
12
+ { title: "Historical", prescriptions: mdm.historical_prescriptions },
13
+ { title: "Historical Immunosuppressant", prescriptions: mdm.historical_immunosuppressant_prescriptions },
14
+ { title: "Bone Meds", prescriptions: mdm.bone_prescriptions }])
@@ -0,0 +1,11 @@
1
+ .filters
2
+ .filters__form
3
+ = search_form_for user_search, url: users_path do |f|
4
+ .row
5
+ .small-9.large-4.columns
6
+ = f.label "Name or username contains"
7
+ = f.search_field :family_name_or_given_name_or_username_or_email_cont
8
+ .small-3.large-4.columns.actions.end
9
+ = f.submit t("helpers.submit.filter"), class: "button"
10
+ ' or
11
+ = link_to t("helpers.reset"), users_path
@@ -0,0 +1,24 @@
1
+ = content_for(:filters) do
2
+ = render "filters", user_search: user_search
3
+
4
+ = within_admin_layout(title: "Users") do
5
+ table.all-users
6
+ thead
7
+ tr
8
+ th Name
9
+ th Position
10
+ th Email
11
+ th Role
12
+ th.col-width-date-time Expired at
13
+ tbody
14
+ - users.each do |user|
15
+ tr
16
+ td= user.full_name
17
+ td= user.professional_position
18
+ td= user.email
19
+ td
20
+ - user.roles.each do |role|
21
+ span.tag(class=role.name)= role.name.humanize
22
+ td= l(user.expired_at)
23
+
24
+ == pagy_foundation_nav pagy
@@ -3,7 +3,7 @@
3
3
  require "core_extensions/i18n/handle_blank_value"
4
4
  require "core_extensions/i18n/always_cascade"
5
5
  require "core_extensions/dumb_delegator"
6
- require "core_extensions/active_record/sort"
6
+ # require "core_extensions/active_record/sort"
7
7
  require "core_extensions/date"
8
8
  require "core_extensions/active_support/duration"
9
9
  require "core_extensions/scenic"
@@ -14,6 +14,6 @@ require "core_extensions/ox/element_additions"
14
14
  I18n.extend CoreExtensions::I18n::HandleBlankValue
15
15
  I18n::Backend::Simple.include(I18n::Backend::Cascade)
16
16
  I18n.extend CoreExtensions::I18n::AlwaysCascade
17
- ActiveRecord::Base.include(CoreExtensions::ActiveRecord::Sort)
17
+ # ActiveRecord::Base.include(CoreExtensions::ActiveRecord::Sort)
18
18
  Date.include(CoreExtensions::Date::Constants)
19
19
  Hash.include(CoreExtensions::Hash::OpenStructConversion)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- Delayed::Worker.logger = Logger.new(Rails.root.join("log", "delayed_job.log"))
3
+ Delayed::Worker.logger = Logger.new(Rails.root.join("log/delayed_job.log"))
4
4
  Delayed::Worker.destroy_failed_jobs = false
5
5
  Delayed::Worker.max_attempts = 10 # overridden e.g. in FeedJob
6
6
  Delayed::Worker.max_run_time = 2.hours
@@ -41,6 +41,7 @@ ActiveSupport::Inflector.inflections(:en) do |inflect|
41
41
  inflect.acronym "HIV"
42
42
  inflect.acronym "HL7"
43
43
  inflect.acronym "MDM"
44
+ inflect.acronym "MDMs"
44
45
  inflect.acronym "NHS"
45
46
  inflect.acronym "NHS"
46
47
  inflect.acronym "ODS"
@@ -7,3 +7,8 @@
7
7
  # Foundation extra: Add nav, nav_js and combo_nav_js helpers and templates for Foundation pagination
8
8
  # See https://ddnexus.github.io/pagy/extras/foundation
9
9
  require "pagy/extras/foundation"
10
+
11
+ # Allow the client to request a custom number of items per page with an optional selector UI.
12
+ # It is useful with APIs or higly user-customizable apps.
13
+ # Usefule for testing pagination from testing by supplying eg :items => 1
14
+ require "pagy/extras/items"
@@ -6,6 +6,7 @@ en:
6
6
  legend: Allergies
7
7
  description: Description
8
8
  recorded_at: Recorded
9
+ recorded_by: By
9
10
  add: Add
10
11
  delete: Delete
11
12
  edit: Edit
@@ -0,0 +1,15 @@
1
+ en:
2
+ renalware:
3
+ medications:
4
+ tabbed_prescriptions_list_component:
5
+ title: Prescriptions
6
+ view_all: View All
7
+ drug_name: Drug
8
+ drug_type: Type
9
+ dose: Dose
10
+ frequency: Freq
11
+ route: Route
12
+ provider: Provider
13
+ administer_on_hd: Give on HD
14
+ terminated_on: Term on
15
+ started_on: Started on
@@ -18,6 +18,7 @@ en:
18
18
  studies: Clinical Studies
19
19
  renal_registry_checks: Renal Registry Checks
20
20
  hospital_units: Dialysis Units
21
+ users: Users
21
22
  mdms:
22
23
  menu_title: MDMs
23
24
  hd: HD
@@ -26,6 +26,7 @@ en:
26
26
  demographics: Demographics
27
27
  clinical_summary: Clinical Summary
28
28
  inpatient_admissions: Inpatient Admissions (%{count})
29
+ messages: Messages
29
30
  proms: PROMS
30
31
  modalities:
31
32
  heading: Modalities
@@ -7,6 +7,7 @@ super_admin:
7
7
  - Renalware::HD::Dialyser
8
8
  - Renalware::HD::CannulationType
9
9
  - Renalware::System::Download
10
+ - Renalware::Pathology::ObservationDescription
10
11
  admin:
11
12
  - Renalware::User
12
13
  - Renalware::BagType
@@ -28,6 +28,7 @@ Renalware::Engine.routes.draw do
28
28
  draw :snippets
29
29
  draw :system
30
30
  draw :transplants
31
+ draw :users
31
32
  draw :virology
32
33
 
33
34
  # Last
@@ -2,7 +2,7 @@
2
2
 
3
3
  namespace :messaging do
4
4
  namespace :internal do
5
- resources :messages, only: [:new, :create] do
5
+ resources :messages, only: [:new, :create, :index] do
6
6
  resources :receipts, only: [] do
7
7
  patch :mark_as_read, on: :member
8
8
  end
@@ -14,3 +14,11 @@ namespace :messaging do
14
14
  end
15
15
  end
16
16
  end
17
+
18
+ resources :patients, only: [] do
19
+ namespace :messaging do
20
+ namespace :internal do
21
+ resources :messages, only: :index
22
+ end
23
+ end
24
+ end
@@ -28,6 +28,7 @@ end
28
28
 
29
29
  namespace :pathology do
30
30
  resources :code_groups
31
+ resources :observation_descriptions, except: :destroy
31
32
  namespace :requests do
32
33
  # NOTE: This needs to be POST since the params may exceed url char limit in GET
33
34
  post "requests/new", to: "requests#new", as: "new_request"
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  namespace :patients do
4
+ get "mdms/:scope", to: "mdms#show", as: :mdms
4
5
  resources :primary_care_physicians
5
6
  resources :practices, only: [] do
6
7
  collection do
@@ -5,6 +5,9 @@ namespace :system do
5
5
  resources :user_feedback, except: :destroy, controller: "user_feedback"
6
6
  resources :messages
7
7
  resources :downloads
8
+ resources :view_metadata, only: [:edit, :update] do
9
+ patch :restore, on: :member
10
+ end
8
11
  end
9
12
 
10
13
  match "/404", to: "system/errors#not_found", via: :all
@@ -0,0 +1,3 @@
1
+ # frozen_string_literal: true
2
+
3
+ resources :users, only: :index
@@ -0,0 +1,18 @@
1
+ -- Note there is already a convert_to_float function but that remains untouched - this version
2
+ -- has different arguments so is a new (overlaoded) function.
3
+ CREATE OR REPLACE FUNCTION renalware.convert_to_float(v_input text, default_value_if_cannot_be_coerced float)
4
+ RETURNS float AS $$
5
+ DECLARE v_float_value float DEFAULT NULL;
6
+ BEGIN
7
+ BEGIN
8
+ v_float_value := v_input::float;
9
+ EXCEPTION WHEN OTHERS THEN
10
+ RETURN default_value_if_cannot_be_coerced;
11
+ END;
12
+ RETURN v_float_value;
13
+ END;
14
+ $$ LANGUAGE plpgsql;
15
+
16
+ COMMENT ON FUNCTION renalware.convert_to_float(text, float) IS
17
+ 'Tries to coerce v_input into a float (double precision) and it it cannot,
18
+ returns default_value_if_cannot_be_coerced';
@@ -0,0 +1,92 @@
1
+ set SEARCH_PATH=renalware,public;
2
+
3
+ CREATE OR REPLACE FUNCTION update_current_observation_set_from_trigger() RETURNS TRIGGER AS $body$
4
+ -- TC 14/12/2017 v02
5
+ -- This function is called by a trigger when a row is inserted or updated in
6
+ -- pathology_observations. Its purpose is to keep current_observation_sets up to date
7
+ -- with the latest observations for any patient.
8
+ -- The current_observation_sets table maintains a jsonb hash into which we insert or replace
9
+ -- the observation, keyed by OBX code.
10
+ -- e.g. .. {"HGB": { "result": 123.1, "observed_at": '2017-12-12-01:01:01'}, ..
11
+ DECLARE
12
+ a_patient_id bigint;
13
+ a_code text;
14
+ current_observed_at timestamp;
15
+ current_result text;
16
+ new_observed_at timestamp;
17
+ BEGIN
18
+ -- RAISE NOTICE 'TRIGGER called on %',TG_TABLE_NAME ;
19
+
20
+ /*
21
+ If inserting or updating, we _could_ assume the last observation to be inserted is
22
+ the most 'recent' one (with the latest observed_at date).
23
+ However the order of incoming messages is not guaranteed, so we have two options:
24
+ 1. Refresh the entire current_observation_set for the patient
25
+ 2. Check the current observed_at date in the jsonb and only update if we have a more
26
+ recent one
27
+ We have gone for 2.
28
+ */
29
+
30
+ IF (TG_OP = 'INSERT' OR TG_OP = 'UPDATE') AND (NEW.result != '') THEN
31
+
32
+ -- Note we could re-generate the entire current pathology for the patient using
33
+ -- select refresh_current_observation_set(a_patient_id);
34
+ -- which is safer but uses more resources, so avoiding this for now.
35
+
36
+ -- Find and store patient_id into local variable
37
+ select request.patient_id into a_patient_id
38
+ from pathology_observation_requests request
39
+ where request.id = NEW.request_id;
40
+
41
+ -- Find and store the obx code into local variable
42
+ select description.code into a_code
43
+ from pathology_observation_descriptions description
44
+ where description.id = NEW.description_id;
45
+
46
+ -- Important! Create the observation_set if it doesn't exist yet
47
+ -- ignore the error if the row already exists
48
+ insert into pathology_current_observation_sets (patient_id)
49
+ values (a_patient_id)
50
+ ON CONFLICT DO NOTHING;
51
+
52
+ -- We are going to compare the current and new observed_at dates
53
+ -- so need to cast them to a timestamp
54
+ select cast(New.observed_at as timestamp) into new_observed_at;
55
+
56
+ -- Get the most recent date and value for this observation
57
+ -- and store to variables.
58
+ select
59
+ cast(values -> a_code ->> 'observed_at' as timestamp),
60
+ values -> a_code ->> 'result'
61
+ into current_observed_at, current_result from
62
+ pathology_current_observation_sets
63
+ where patient_id = a_patient_id;
64
+
65
+ -- Output some info to help us debug. This can be removed later.
66
+ -- RAISE NOTICE ' Request id % Patient id % Code %', NEW.request_id, a_patient_id, a_code;
67
+ -- RAISE NOTICE ' Last %: % at %', a_code, current_result, current_observed_at;
68
+ -- RAISE NOTICE ' New %: % at %', a_code, NEW.result, new_observed_at;
69
+
70
+ IF current_observed_at IS NULL OR new_observed_at >= current_observed_at THEN
71
+ -- The new pathology_observation row contain a more recent result that the old one.
72
+ -- (note there may not be an old one if the patient has neve had this obs before).
73
+
74
+ -- RAISE NOTICE ' Updating pathology_current_observation_sets..';
75
+
76
+ -- Update the values jsonb column with the new hash for this code, e.g.
77
+ -- .. {"HGB": { "result": 123.1, "observed_at": '2017-12-12-01:01:01'}, ..
78
+ -- Note the `set values` below actually reads in the jsonb, updates it,
79
+ -- and wites the whole thing back.
80
+ update pathology_current_observation_sets
81
+ set updated_at = CURRENT_TIMESTAMP,
82
+ values = jsonb_set(
83
+ values,
84
+ ('{'||a_code||'}')::text[], -- defined in the fn path::text[]
85
+ jsonb_build_object('result', NEW.result, 'observed_at', new_observed_at),
86
+ true)
87
+ where patient_id = a_patient_id;
88
+ END IF;
89
+ END IF;
90
+ RETURN NULL ;
91
+ END $body$ LANGUAGE plpgsql VOLATILE COST 100;
92
+ -- End function