renalware-core 2.0.153 → 2.0.155

Sign up to get free protection for your applications and to get access to all the features.
Files changed (286) 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/drugs_helper.rb +6 -0
  44. data/app/helpers/renalware/layout_helper.rb +1 -1
  45. data/app/models/concerns/renalware/sortable.rb +49 -0
  46. data/app/models/renalware/accesses/patient.rb +2 -2
  47. data/app/models/renalware/accesses/plan.rb +1 -1
  48. data/app/models/renalware/admissions/request.rb +1 -0
  49. data/app/models/renalware/clinical/body_composition.rb +1 -1
  50. data/app/models/renalware/clinical/dry_weight.rb +1 -1
  51. data/app/models/renalware/clinics/clinic_visit.rb +5 -4
  52. data/app/models/renalware/feeds/files/create_feed_file.rb +1 -1
  53. data/app/models/renalware/hd/patient.rb +1 -1
  54. data/app/models/renalware/hd/preference_set.rb +1 -1
  55. data/app/models/renalware/hd/profile.rb +4 -4
  56. data/app/models/renalware/hd/schedule_definition.rb +1 -1
  57. data/app/models/renalware/hd/session.rb +2 -2
  58. data/app/models/renalware/hd/session_forms/batch_compile_pdfs.rb +1 -1
  59. data/app/models/renalware/hd/station.rb +2 -1
  60. data/app/models/renalware/letters/description.rb +2 -0
  61. data/app/models/renalware/letters/letter.rb +1 -1
  62. data/app/models/renalware/letters/part/prescriptions.rb +12 -3
  63. data/app/models/renalware/letters/pdf_letter_cache.rb +1 -1
  64. data/app/models/renalware/letters/printing/batch_compile_pdfs.rb +1 -1
  65. data/app/models/renalware/letters/recipient_params_processor.rb +1 -1
  66. data/app/models/renalware/medications/prescription.rb +0 -4
  67. data/app/models/renalware/messaging/internal/message_form.rb +1 -0
  68. data/app/models/renalware/messaging/internal/message_form_builder.rb +2 -1
  69. data/app/models/renalware/pathology/current_observations_for_descriptions_query.rb +3 -3
  70. data/app/models/renalware/pathology/measurement_unit.rb +13 -0
  71. data/app/models/renalware/pathology/observation_description.rb +23 -5
  72. data/app/models/renalware/pathology/observation_descriptions_by_code_query.rb +1 -1
  73. data/app/models/renalware/pathology/observation_requests_attributes_builder.rb +45 -5
  74. data/app/models/renalware/pathology/observations_within_date_range_query.rb +1 -1
  75. data/app/models/renalware/patient.rb +2 -2
  76. data/app/models/renalware/patients/bookmark.rb +2 -2
  77. data/app/models/renalware/patients/mdm_menu.rb +41 -0
  78. data/app/models/renalware/patients/mdm_patients_query.rb +1 -1
  79. data/app/models/renalware/patients/search_query.rb +1 -1
  80. data/app/models/renalware/patients/worry.rb +0 -1
  81. data/app/models/renalware/pd/mdm_patients_query.rb +1 -1
  82. data/app/models/renalware/problems/problem.rb +2 -1
  83. data/app/models/renalware/snippets/snippet_query.rb +1 -1
  84. data/app/models/renalware/surveys/question.rb +1 -2
  85. data/app/models/renalware/system/column_definition.rb +43 -0
  86. data/app/models/renalware/system/filter_definition.rb +29 -0
  87. data/app/models/renalware/system/update_user.rb +5 -0
  88. data/app/models/renalware/system/version.rb +11 -0
  89. data/app/models/renalware/system/view_metadata.rb +25 -0
  90. data/app/models/renalware/transplants/donation.rb +1 -1
  91. data/app/models/renalware/transplants/donor_followup.rb +0 -1
  92. data/app/models/renalware/transplants/failure_cause_description.rb +1 -1
  93. data/app/models/renalware/transplants/mdm_patients_query.rb +2 -2
  94. data/app/models/renalware/transplants/patient.rb +1 -1
  95. data/app/models/renalware/transplants/recipient_followup.rb +1 -3
  96. data/app/models/renalware/transplants/registration.rb +1 -3
  97. data/app/models/renalware/transplants/registrations/wait_list_query.rb +4 -4
  98. data/app/models/renalware/ukrdc/measurement_unit.rb +21 -0
  99. data/app/models/renalware/ukrdc/outgoing/rendering/lab_order.rb +30 -2
  100. data/app/models/renalware/ukrdc/paths.rb +1 -1
  101. data/app/models/renalware/ukrdc/treatment_timeline/prepare_tables.rb +1 -1
  102. data/app/models/renalware/ukrdc/treatment_timeline/remap_model_table_names_to_their_prepared_equivalents.rb +1 -1
  103. data/app/policies/application_policy.rb +1 -1
  104. data/app/policies/renalware/medications/prescription_policy.rb +35 -0
  105. data/app/policies/renalware/system/view_metadata_policy.rb +17 -0
  106. data/app/presenters/concerns/renalware/accountable_presentation.rb +33 -0
  107. data/app/presenters/renalware/clinics/visit_presenter.rb +11 -0
  108. data/app/presenters/renalware/events/event_presenter.rb +11 -0
  109. data/app/presenters/renalware/mdm_presenter.rb +11 -0
  110. data/app/presenters/renalware/pathology/results_presenter.rb +1 -2
  111. data/app/presenters/renalware/renal/clinical_summary_presenter.rb +9 -6
  112. data/app/views/renalware/admin/playgrounds/show.html.slim +2 -6
  113. data/app/views/renalware/admin/users/edit.html.slim +9 -0
  114. data/app/views/renalware/admin/users/index.html.slim +6 -0
  115. data/app/views/renalware/admissions/admissions/_filters.html.slim +8 -16
  116. data/app/views/renalware/clinical/allergies/_list.html.slim +3 -1
  117. data/app/views/renalware/dashboard/dashboards/show.html.slim +1 -0
  118. data/app/views/renalware/hd/protocols/_virology.html.slim +4 -5
  119. data/app/views/renalware/letters/letters/_form.html.slim +1 -1
  120. data/app/views/renalware/letters/parts/_prescriptions.html.slim +4 -0
  121. data/app/views/renalware/mdm/_prescriptions.html.slim +4 -13
  122. data/app/views/renalware/mdm/prescriptions/_table.html.slim +3 -1
  123. data/app/views/renalware/medications/prescriptions/_current_hd.html.slim +13 -0
  124. data/app/views/renalware/medications/prescriptions/_filter_form.html.slim +26 -13
  125. data/app/views/renalware/medications/prescriptions/_form.html.slim +3 -2
  126. data/app/views/renalware/medications/prescriptions/_options.html.slim +3 -3
  127. data/app/views/renalware/medications/prescriptions/_table.html.slim +5 -4
  128. data/app/views/renalware/medications/prescriptions/_tables.html.slim +13 -16
  129. data/app/views/renalware/medications/prescriptions/index.html.slim +5 -4
  130. data/app/views/renalware/messaging/internal/messages/_form.html.slim +3 -0
  131. data/app/views/renalware/messaging/internal/messages/index.html.slim +36 -0
  132. data/app/views/renalware/navigation/_mdms.html.slim +5 -0
  133. data/app/views/renalware/navigation/_renal.html.slim +1 -0
  134. data/app/views/renalware/navigation/{_super_admin.html.slim → _super_admin.html.slim.dead} +0 -0
  135. data/app/views/renalware/pathology/code_groups/edit.html.slim +5 -5
  136. data/app/views/renalware/pathology/code_groups/index.html.slim +4 -5
  137. data/app/views/renalware/pathology/code_groups/show.html.slim +25 -26
  138. data/app/views/renalware/pathology/observation_descriptions/_filters.html.slim +14 -0
  139. data/app/views/renalware/pathology/observation_descriptions/edit.html.slim +21 -0
  140. data/app/views/renalware/pathology/observation_descriptions/index.html.slim +38 -0
  141. data/app/views/renalware/pathology/requests/requests/request_form/_crs_form.html.slim +1 -1
  142. data/app/views/renalware/patients/alerts/_list.html.slim +1 -0
  143. data/app/views/renalware/patients/mdms/_filters.html.slim +38 -0
  144. data/app/views/renalware/patients/mdms/_table.html.slim +72 -0
  145. data/app/views/renalware/patients/mdms/show.html.slim +18 -0
  146. data/app/views/renalware/patients/side_menu/_general.html.slim +4 -0
  147. data/app/views/renalware/patients/worryboard/_filters.html.slim +18 -13
  148. data/app/views/renalware/pd/_peritonitis_episodes.html.slim +13 -13
  149. data/app/views/renalware/pd/adequacy_results/_form_fields.html.slim +1 -1
  150. data/app/views/renalware/pd/adequacy_results/_table.html.slim +2 -2
  151. data/app/views/renalware/pd/peritonitis_episodes/show.html.slim +8 -6
  152. data/app/views/renalware/shared/_fieldset.html.slim +1 -2
  153. data/app/views/renalware/shared/_magellan_block.html.slim +1 -2
  154. data/app/views/renalware/system/view_metadata/_columns_table.html.slim +44 -0
  155. data/app/views/renalware/system/view_metadata/_filters_form.html.slim +19 -0
  156. data/app/views/renalware/system/view_metadata/_versions.html.slim +23 -0
  157. data/app/views/renalware/system/view_metadata/edit.html.slim +66 -0
  158. data/app/views/renalware/transplants/mdm/_prescriptions.html.slim +6 -22
  159. data/app/views/renalware/users/_filters.html.slim +11 -0
  160. data/app/views/renalware/users/index.html.slim +24 -0
  161. data/config/initializers/core_extensions.rb +2 -2
  162. data/config/initializers/delayed_job.rb +1 -1
  163. data/config/initializers/inflections.rb +1 -0
  164. data/config/initializers/pagy.rb +5 -0
  165. data/config/locales/renalware/clinical/allergies.en.yml +1 -0
  166. data/config/locales/renalware/medications/tabbed_prescriptions_list_component.yml +15 -0
  167. data/config/locales/renalware/navigation/renal.en.yml +1 -0
  168. data/config/locales/renalware/patients/side_menu.en.yml +1 -0
  169. data/config/permissions.yml +1 -0
  170. data/config/routes.rb +1 -0
  171. data/config/routes/messaging.rb +9 -1
  172. data/config/routes/pathology.rb +1 -0
  173. data/config/routes/patients.rb +1 -0
  174. data/config/routes/system.rb +3 -0
  175. data/config/routes/users.rb +3 -0
  176. data/db/functions/convert_to_float_with_explicit_return_v01.sql +18 -0
  177. data/db/functions/update_current_observation_set_from_trigger_v05.sql +92 -0
  178. data/db/functions/update_pathology_observations_nresult_from_trigger_v01.sql +13 -0
  179. data/db/migrate/20200122182018_update_patient_current_modalities.rb +7 -0
  180. data/db/migrate/20200122182036_create_transplant_mdm_patients.rb +7 -0
  181. data/db/migrate/20200122190909_create_view_metadata.rb +44 -0
  182. data/db/migrate/20200131133223_create_hd_mdm_patients.rb +7 -0
  183. data/db/migrate/20200205185151_add_columns_to_system_view_metadata.rb +13 -0
  184. data/db/migrate/20200219113324_create_supportive_care_mdm_patients_view.rb +7 -0
  185. data/db/migrate/20200622120232_add_limits_to_path_obs_descriptions.rb +18 -0
  186. data/db/migrate/20200626081248_overload_convert_to_float_function.rb +13 -0
  187. data/db/migrate/20200626090256_add_nresult_to_pathology_observations.rb +29 -0
  188. data/db/migrate/20200628094228_add_prescriber_to_users.rb +14 -0
  189. data/db/migrate/20200812074223_add_public_flag_to_messages.rb +18 -0
  190. data/db/migrate/20200815150303_create_system_versions.rb +16 -0
  191. data/db/migrate/20200817085618_create_pd_mdm_patients.rb +7 -0
  192. data/db/migrate/20200817103930_create_low_clearance_mdm_patients.rb +7 -0
  193. data/db/migrate/20201001144512_update_fn_update_current_obs_set_triggerv05.rb +13 -0
  194. data/db/migrate/20201001145452_add_position_to_letter_descriptions.rb +5 -0
  195. data/db/migrate/20201009090959_make_drug_types_unique.rb +8 -0
  196. data/db/migrate/20201012160414_add_suggested_measurement_unit_to_pathology_observation_descriptions.rb +18 -0
  197. data/db/migrate/20201012171428_create_ukrdc_measurement_units.rb +18 -0
  198. data/db/migrate/20201015160542_add_position_to_drug_types.rb +31 -0
  199. data/db/migrate/20201020155510_add_bmi_to_clinic_visits.rb +28 -0
  200. data/db/migrate/20201020164524_update_pd_mdm_patients_view.rb +7 -0
  201. data/db/migrate/20201020170921_update_hd_mdm_patients_view.rb +7 -0
  202. data/db/migrate/20201020171139_update_low_clearance_mdm_patients_view.rb +7 -0
  203. data/db/migrate/20201021153832_update_supportive_care_mdm_patients_view.rb +7 -0
  204. data/db/migrate/20201021154809_update_transplant_mdm_patients_view.rb +7 -0
  205. data/db/migrate/20201023092859_remove_unused_indexes.rb +20 -0
  206. data/db/seeds/default/system/seeds.rb +1 -0
  207. data/db/seeds/default/system/view_metadata.rb +91 -0
  208. data/db/seeds/default/ukrdc/measurement_units.csv +12 -0
  209. data/db/seeds/default/ukrdc/measurement_units.rb +15 -0
  210. data/db/seeds/default/ukrdc/seeds.rb +1 -0
  211. data/db/triggers/update_pathology_observations_nresult_trigger_v01.sql +11 -0
  212. data/db/views/hd_mdm_patients_v01.sql +69 -0
  213. data/db/views/hd_mdm_patients_v02.sql +70 -0
  214. data/db/views/low_clearance_mdm_patients_v01.sql +38 -0
  215. data/db/views/low_clearance_mdm_patients_v02.sql +39 -0
  216. data/db/views/patient_current_modalities_v02.sql +18 -0
  217. data/db/views/pd_mdm_patients_v01.sql +42 -0
  218. data/db/views/pd_mdm_patients_v02.sql +43 -0
  219. data/db/views/supportive_care_mdm_patients_v01.sql +28 -0
  220. data/db/views/supportive_care_mdm_patients_v02.sql +29 -0
  221. data/db/views/transplant_mdm_patients_v01.sql +46 -0
  222. data/db/views/transplant_mdm_patients_v02.sql +47 -0
  223. data/lib/renalware/configuration.rb +2 -0
  224. data/lib/renalware/engine.rb +2 -2
  225. data/lib/renalware/version_number.rb +1 -1
  226. data/lib/tasks/db.rake +9 -0
  227. data/lib/tasks/pd.rake +28 -0
  228. data/spec/factories/drugs/drug_types.rb +5 -1
  229. data/spec/factories/messaging/internal/messages.rb +1 -0
  230. data/spec/factories/patients/practices.rb +1 -1
  231. data/spec/factories/patients/primary_care_physicians.rb +1 -1
  232. data/spec/factories/system/users.rb +1 -0
  233. data/spec/factories/system/view_metadata.rb +20 -0
  234. data/spec/support/capybara_helper.rb +2 -4
  235. data/spec/support/letters_spec_helper.rb +1 -1
  236. data/spec/support/matchers/validate_timeliness_of.rb +1 -1
  237. data/spec/support/pathology_spec_helper.rb +1 -2
  238. data/spec/support/policy_spec_helper.rb +12 -0
  239. data/vendor/assets/javascripts/foundation/foundation.alert.js +43 -0
  240. data/vendor/assets/javascripts/foundation/foundation.dropdown.js +468 -0
  241. data/vendor/assets/javascripts/foundation/foundation.js +727 -0
  242. data/vendor/assets/javascripts/foundation/foundation.reveal.js +522 -0
  243. data/vendor/assets/javascripts/foundation/foundation.tab.js +247 -0
  244. data/vendor/assets/javascripts/foundation/foundation.tooltip.js +348 -0
  245. data/vendor/assets/javascripts/foundation/foundation.topbar.js +458 -0
  246. data/vendor/assets/stylesheets/foundation/_functions.scss +156 -0
  247. data/vendor/assets/stylesheets/foundation/components/_alert-boxes.scss +128 -0
  248. data/vendor/assets/stylesheets/foundation/components/_buttons.scss +261 -0
  249. data/vendor/assets/stylesheets/foundation/components/_dropdown-buttons.scss +130 -0
  250. data/vendor/assets/stylesheets/foundation/components/_dropdown.scss +269 -0
  251. data/vendor/assets/stylesheets/foundation/components/_forms.scss +601 -0
  252. data/vendor/assets/stylesheets/foundation/components/_global.scss +566 -0
  253. data/vendor/assets/stylesheets/foundation/components/_grid.scss +292 -0
  254. data/vendor/assets/stylesheets/foundation/components/_labels.scss +106 -0
  255. data/vendor/assets/stylesheets/foundation/components/_pagination.scss +163 -0
  256. data/vendor/assets/stylesheets/foundation/components/_panels.scss +107 -0
  257. data/vendor/assets/stylesheets/foundation/components/_reveal.scss +212 -0
  258. data/vendor/assets/stylesheets/foundation/components/_side-nav.scss +120 -0
  259. data/vendor/assets/stylesheets/foundation/components/_split-buttons.scss +203 -0
  260. data/vendor/assets/stylesheets/foundation/components/_sub-nav.scss +125 -0
  261. data/vendor/assets/stylesheets/foundation/components/_tables.scss +135 -0
  262. data/vendor/assets/stylesheets/foundation/components/_tabs.scss +142 -0
  263. data/vendor/assets/stylesheets/foundation/components/_tooltips.scss +142 -0
  264. data/vendor/assets/stylesheets/foundation/components/_top-bar.scss +745 -0
  265. data/vendor/assets/stylesheets/foundation/components/_type.scss +525 -0
  266. data/vendor/assets/stylesheets/foundation/components/_visibility.scss +425 -0
  267. metadata +162 -64
  268. data/app/views/renalware/pd/infection_organisms/_edit.html.slim.obsolete +0 -16
  269. data/app/views/renalware/transplants/donor_operations/_sections_nav.html.slim +0 -11
  270. data/app/views/renalware/transplants/donor_workups/_sections_nav.html.slim +0 -15
  271. data/app/views/renalware/transplants/recipient_operations/_sections_nav.html.slim +0 -14
  272. data/app/views/renalware/transplants/recipient_workups/_sections_nav.html.slim +0 -15
  273. data/lib/core_extensions/active_record/sort.rb +0 -52
  274. data/spec/support/pages/accesses/procedure_page.rb +0 -53
  275. data/spec/support/pages/accesses/profile_page.rb +0 -45
  276. data/spec/support/pages/admissions/consults_page.rb +0 -26
  277. data/spec/support/pages/clinical/allergy_page.rb +0 -74
  278. data/spec/support/pages/clinical/profile_page.rb +0 -28
  279. data/spec/support/pages/hd/prescription_administration_dialog.rb +0 -132
  280. data/spec/support/pages/letters/form.rb +0 -63
  281. data/spec/support/pages/letters/mailshots/form.rb +0 -58
  282. data/spec/support/pages/letters/patient_letters.rb +0 -20
  283. data/spec/support/pages/low_clearance/profile_page.rb +0 -70
  284. data/spec/support/pages/medications/home_delivery_dialog.rb +0 -77
  285. data/spec/support/pages/medications/prescription_fom.rb +0 -62
  286. data/spec/support/pages/page_object.rb +0 -10
@@ -45,6 +45,6 @@
45
45
  p
46
46
  | ======== #{lab_name} ========
47
47
  - patient_rules.each do |patient_rule|
48
- = patient_rule
48
+ p= patient_rule
49
49
  - else
50
50
  p No tests required.
@@ -1 +1,2 @@
1
1
  = render partial: "/renalware/patients/alerts/alert", collection: patient.alerts
2
+ = render Renalware::Admissions::ActiveConsultAlertComponent.new(patient: patient, current_user: current_user)
@@ -0,0 +1,38 @@
1
+ / Render any filters defined in the view (ViewMetadata) #filters hash (hstore).
2
+ / The format of the filters is
3
+ / column_names: filter_type (list|search)
4
+ / e.g
5
+ / sex: :list => will render a dropdown of unique options pulled from the underlying view
6
+ / nhs_number: :search => maps to case insensitive ransack predicate
7
+ / nhs_number_or_local_patient_id: :search => will add _cont to end and use that as the predicate
8
+
9
+ - return if options.current_view.filters.empty?
10
+
11
+ - url = patients_mdms_path(scope: params[:scope], filter: params[:filter])
12
+ = simple_form_for options.search,
13
+ url: patients_mdms_path(scope: params[:scope], filter: params[:filter]),
14
+ method: :get do |f|
15
+
16
+ .flex.flex-col.sm:flex-row.items-end.pb-4
17
+ - options.current_view.filters.each do |filter|
18
+ - column = filter.code
19
+ - type = filter.type
20
+ - filter_type = ActiveSupport::StringInquirer.new(type)
21
+
22
+ - if filter_type.list?
23
+ / Unique values selected from a dropdown
24
+ .w-full.sm:max-w-xs.pr-2
25
+ = f.input "#{column}_eq",
26
+ include_blank: true,
27
+ collection: options.search.klass.distinct(column.to_sym).pluck(column.to_sym).compact,
28
+ label: column.humanize
29
+ / input_html: { onchange: "this.form.submit();" }
30
+ - elsif filter_type.search?
31
+ / Free text inputs
32
+ .w-full.sm:max-w-xs.pr-2
33
+ = f.input "#{column}_cont", label: column.humanize
34
+
35
+ .w-full.sm:max-w-xs.pr-2
36
+ = f.submit "Filter", class: "button secondary", style: "margin-bottom: 10px"
37
+ |  
38
+ = link_to "Clear", url
@@ -0,0 +1,72 @@
1
+ ruby:
2
+ view = options.current_view
3
+ attribute_names = options.patients.first.class.columns.map(&:name) - %w(id secure_id document)
4
+ attribute_names = (view.columns.map(&:code) + attribute_names).uniq
5
+ columns = attribute_names.map do |attr|
6
+ view.columns.detect{ |col| col.code == attr } || Renalware::System::ColumnDefinition.new(code: attr, hidden: false)
7
+ end
8
+ # TODO move to a helper or view object
9
+ # Sort column headers and remove hidden ones.
10
+ # attrs = options.patients.first.class.columns.map(&:name) - %w(id secure_id document)
11
+ # use the older of cols in view.columns to sort attrs - works even if only a few cols are in view.columns
12
+ #if options.current_view.columns.present?
13
+ # attrs = options.current_view.columns & attrs
14
+ #end
15
+
16
+ table
17
+ thead
18
+ tr
19
+ th.col-width-tiny
20
+ - columns.each do |col|
21
+ - code = col.code
22
+ - klasses = []
23
+ - klasses << "col-width-date" if code.end_with?("_date") || code.end_with?("_on")
24
+ - klasses << "col-width-date-time" if code.end_with?("_at")
25
+ - klasses << "col-width-nhs-no" if code == "nhs_number"
26
+ - klasses << "col-width-tiny" if code == "sex"
27
+ - klasses << "col-width-tiny" if code == "age"
28
+ - klasses << "col-width-large" if code == "patient_name"
29
+ - if klasses.empty? && col.width.present?
30
+ - klasses << "col-width-#{col.width}"
31
+
32
+ - next if col.hidden
33
+ th(class=klasses.join(" "))
34
+ = sort_link(options.search, col.code, col.title)
35
+ th
36
+ / empty to allow tabl;e to expand to the right
37
+ tbody
38
+ - options.patients.each do |patient|
39
+ tr
40
+ td.actions
41
+ = link_to options.view_proc.call(patient), target: "_blank" do
42
+ i.fa.fa-external-link-square-alt
43
+ | &nbsp;&nbsp;
44
+ | MDM
45
+ - columns.each do |col|
46
+ - next if col.hidden
47
+ - klass = "col-width-#{col.width}-with-ellipsis" if col.truncate
48
+ - code = col.code
49
+ - value = patient.attributes[code]
50
+ - if code == "patient_name"
51
+ td= default_patient_link(patient)
52
+ - else
53
+ - if value.respond_to?(:strftime)
54
+ - value = l(value)
55
+
56
+ / Add title attribute if the cell content is truncated, so its possible to see the
57
+ / entire content if you hover
58
+ - title = value if col.truncate
59
+
60
+ / Boolean values we will show as a tick icon
61
+ td(class=klass title=title)
62
+ - if value == true || value == "Y"
63
+ i.far.fa-check-circle.text-green-700
64
+ - elsif value == false || value == "N"
65
+ i.far.fa-circle.text-gray-400
66
+ - else
67
+ = value
68
+ td
69
+ / empty to allow table to expand to the right
70
+
71
+ /= paginate options.patients
72
+ == pagy_foundation_nav options.pagination
@@ -0,0 +1,18 @@
1
+ = content_for(:filters) do
2
+ = render "filters", options: options
3
+
4
+ = within_admin_layout(title: "#{options.current_view.scope.humanize} MDMS") do
5
+ - if options.patients.size.zero?
6
+ p No matching patients
7
+ - else
8
+ = render "table", options: options
9
+
10
+ - if current_user_is_super_admin?
11
+ = link_to edit_system_view_metadatum_path(options.current_view, format: :html),
12
+ data: { "reveal-id" => "system-view-metadata-modal", "reveal-ajax" => "true" },
13
+ class: "right rounded px-2 py-1 bg-orange-300 text-gray-800 text-sm" do
14
+ i.fas.fa-cogs.pr-2
15
+ | Configure this table for everyone
16
+
17
+ / The modal dialog container for internal message sending
18
+ #system-view-metadata-modal.reveal-modal.medium(data-reveal)
@@ -62,6 +62,10 @@ li.heading= t(".heading")
62
62
  path: patient_admissions_path(patient),
63
63
  active_when_controller_matches: %r{renalware/admissions}
64
64
 
65
+ = patient_menu_item title: t(".messages", count: 1),
66
+ path: patient_messaging_internal_messages_path(patient),
67
+ active_when_controller_matches: %r{messaging/internal}
68
+
65
69
  = patient_menu_item title: t(".proms"),
66
70
  path: patient_surveys_dashboard_path(patient),
67
71
  active_when_controller_matches: %r{renalware/surveys}
@@ -1,15 +1,20 @@
1
- .row.search-form.filters
2
- = simple_form_for query,
3
- as: :q,
4
- url: worryboard_path,
5
- method: :get do |f|
1
+ / This is required for now - its to do with the page title being a float and perhaps not clearing
2
+ .clear-both
6
3
 
7
- .small-6.medium-2.large-2.columns
8
- = f.input :patient_current_modality_description_id_eq,
9
- collection: modalities,
10
- label: "Modality"
4
+ .search-form.filters.filters--flex.max-w-screen-md
5
+ = simple_form_for query, as: :q, url: worryboard_path, method: :get do |f|
11
6
 
12
- .medium-2.large-3.columns.actions.end
13
- = f.submit "Filter", class: "button"
14
- ' or
15
- = link_to t("helpers.reset"), worryboard_path
7
+ .flex.flex-col.sm:flex-row.items-end.pb-4
8
+ .w-full.sm:max-w-xs.pr-2
9
+ = f.input :patient_current_modality_description_id_eq,
10
+ collection: modalities,
11
+ label: "Modality"
12
+ .w-full.sm:max-w-xs.pr-2
13
+ = f.input :created_by_id_eq,
14
+ collection: Renalware::User.where("id in (select distinct created_by_id from patient_worries)"),
15
+ label: "Added by"
16
+
17
+ .flex-shrink-0.pt-4.filters--actions
18
+ = f.submit "Filter", class: "button", style: "margin: 0"
19
+ ' or
20
+ = link_to t("helpers.reset"), worryboard_path
@@ -1,9 +1,14 @@
1
1
  table
2
2
  thead
3
+ tr
4
+ th.border-none(colspan=2)
5
+ th.text-center(colspan=2) Treatment
6
+ th.border-none(colspan=4)
3
7
  tr
4
8
  th.col-width-tiny
5
9
  th.col-width-date Diagnosed on
6
- th.col-width-date Treatment Started on
10
+ th.col-width-date Started on
11
+ th.col-width-date Ended on
7
12
  th Episode Type
8
13
  th Organisms
9
14
  th Outcome
@@ -17,15 +22,10 @@ table
17
22
  patient_pd_peritonitis_episode_path(patient, episode.id),
18
23
  class: "view-pe",
19
24
  id: "view-pe-#{episode.id}"
20
- td valign="top"
21
- = l episode.diagnosis_date
22
- td valign="top"
23
- = l episode.treatment_start_date
24
- td valign="top"
25
- = episode.episode_types_summary
26
- td valign="top"
27
- = episode.infection_organisms.map { |io| io.organism_code&.name }.join(" + ")
28
- td valign="top"
29
- = "Catheter Removed: #{yes_no(episode.catheter_removed)}"
30
- td valign="top"
31
- = episode.updated_at.to_date
25
+ td valign="top"= l episode.diagnosis_date
26
+ td valign="top"= l episode.treatment_start_date
27
+ td valign="top"= l episode.treatment_end_date
28
+ td valign="top"= episode.episode_types_summary
29
+ td valign="top"= episode.infection_organisms.map { |io| io.organism_code&.name }.join(" + ")
30
+ td valign="top"= "Catheter Removed: #{yes_no(episode.catheter_removed)}"
31
+ td valign="top"= episode.updated_at.to_date
@@ -5,5 +5,5 @@
5
5
  = form.input :dial_24_vol_in, wrapper: :hz_sm
6
6
  = form.input :dial_24_vol_out, wrapper: :hz_sm
7
7
  = form.input :dial_24_missing, as: :boolean, wrapper: :hz_sm
8
- = form.input :urine_24_vol, wrapper: :hz_sm
8
+ = form.input :urine_24_vol, wrapper: :hz_sm, hint: "0 indicates anuric"
9
9
  = form.input :urine_24_missing, as: :boolean
@@ -2,9 +2,9 @@ table.toggleable(data-controller="toggle")
2
2
  thead
3
3
  tr
4
4
  - if local_assigns.fetch(:display_patient, false)
5
- th style="border-bottom: none" colspan=4
5
+ th style="border-bottom: none" colspan=5
6
6
  - else
7
- th style="border-bottom: none" colspan=3
7
+ th style="border-bottom: none" colspan=4
8
8
  th.bg-gray-100 style="text-align:center; font-style:italic" colspan=3 Creatinine Clearance
9
9
  th.bg-gray-200 style="text-align:center; font-style:italic" colspan=3 kt/V
10
10
 
@@ -1,8 +1,9 @@
1
- = content_for(:actions) do
2
- = link_to(patient_pd_peritonitis_episode_path(patient, peritonitis_episode, format: :pdf),
3
- class: "button") do
4
- i.fas.fa-print
5
- | Print
1
+ / Removing Print button for now
2
+ / = content_for(:actions) do
3
+ / = link_to(patient_pd_peritonitis_episode_path(patient, peritonitis_episode, format: :pdf),
4
+ / class: "button") do
5
+ / i.fas.fa-print
6
+ / | Print
6
7
 
7
8
  - title = "Peritonitis Episode - Diagnosed: #{l(peritonitis_episode.diagnosis_date)}"
8
9
 
@@ -26,4 +27,5 @@
26
27
  patient: patient,
27
28
  treatable: treatable,
28
29
  current_search: nil,
29
- current_prescriptions: prescriptions
30
+ current_prescriptions: prescriptions,
31
+ display_termination_date: true
@@ -1,6 +1,5 @@
1
- .row data-magellan-destination="#{name}"
1
+ .row
2
2
  .large-12.columns
3
- a name="#{name}"
4
3
  fieldset
5
4
  legend
6
5
  = legend
@@ -1,5 +1,4 @@
1
1
  .columns.small-12.medium-6.large-6.xlarge-4
2
- div data-magellan-destination="#{local_assigns[:destination]}"
3
- a name="#{local_assigns[:destination]}"
2
+ div
4
3
  = article_tag(legend) do
5
4
  = yield
@@ -0,0 +1,44 @@
1
+ table.sortables(style="list-style-type: none;")
2
+ thead(style="position: sticky; top: 0; background-color:#fff;")
3
+ th.col-width-tiny
4
+ i.fas.fa-arrows-alt-v
5
+ i.fas.fa-question-circle.inline.ml-1.text-blue-500(title="Drag the 'hamburger' icon to change the order of columns in the table")
6
+ th.col-width-medium
7
+ | SQL column name
8
+ i.fas.fa-question-circle.inline.ml-1.text-blue-500(title="The programatic name for the data item, determined by the 'SQL view' in use.")
9
+ th.col-width-tiny
10
+ | Hide
11
+ i.fas.fa-question-circle.inline.ml-1.text-blue-500(title="Don't show this column in the table")
12
+ th
13
+ | Label
14
+ i.fas.fa-question-circle.inline.ml-1.text-blue-500(title="The text displayed in the column heading")
15
+ th.col-width-medium
16
+ | Width
17
+ i.fas.fa-question-circle.inline.ml-1.text-blue-500(title="Controls the table column width")
18
+ th.col-width-tiny
19
+ | Truncate
20
+ i.fas.fa-question-circle.inline.ml-1.text-blue-500(title="Will truncate and append an ellipsis to text constrained by its cell width")
21
+
22
+ tbody
23
+ - view.columns.each_with_index do |col, _idx|
24
+ tr.sortable
25
+ td.handle.border-0.text-left
26
+ i.fas.fa-bars
27
+ input(type="hidden" name="view_metadata[columns][][code]" value=col.code)
28
+ td.border-0
29
+ code= col.code
30
+ td.text-center.border-0
31
+ input.m-0(type="checkbox" name="view_metadata[columns][][hidden]" checked=col.hidden)
32
+ td.border-0
33
+ input.m-0(type="text" name="view_metadata[columns][][name]" value=col.name)
34
+ td.border-0
35
+ select.m-0(name="view_metadata[columns][][width]")
36
+ option(value="")
37
+ - Renalware::System::ColumnDefinition.new.width_values.each do |val, x|
38
+ option(value=val selected=(col.width == val.to_s))=val.to_s.humanize
39
+ td.text-center.border-0
40
+ input.m-0(type="checkbox" name="view_metadata[columns][][truncate]" checked=col.truncate)
41
+
42
+ / fc.input(type="checkbox" value=col checked=view.columns.include?(col) name="view_metadata[columns][visible]")
43
+ / input(bestchecked=view.columns.include?(col) name="view_metadata[columns][title]")
44
+ / label(class="" for="view_metadata_columns_#{col}" style="display: inline-block; width: auto")= col.humanize
@@ -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();