renalware-core 2.0.0.pre.beta4 → 2.0.0.pre.beta5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (350) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +3 -2
  3. data/app/assets/javascripts/renalware/application.js.erb +3 -0
  4. data/app/assets/javascripts/renalware/dialogs.js.erb +3 -1
  5. data/app/assets/javascripts/renalware/forms.js +0 -17
  6. data/app/assets/javascripts/renalware/keyboard_shortcuts.js +4 -0
  7. data/app/assets/javascripts/renalware/messaging.js +15 -0
  8. data/app/assets/javascripts/renalware/modality_codes.js +1 -0
  9. data/app/assets/javascripts/renalware/pdf.js +6 -3
  10. data/app/assets/javascripts/renalware/renal.js +2 -1
  11. data/app/assets/javascripts/renalware/session_timeout_redirect.js.erb +10 -4
  12. data/app/assets/javascripts/renalware/toggler.js +5 -0
  13. data/app/assets/stylesheets/renalware/base/_variables.scss +3 -1
  14. data/app/assets/stylesheets/renalware/lib/_foundation_and_overrides.scss +1 -1
  15. data/app/assets/stylesheets/renalware/lib/_select2-foundation5-overrides.scss +22 -1
  16. data/app/assets/stylesheets/renalware/lib/_select2-foundation5.scss +7 -4
  17. data/app/assets/stylesheets/renalware/modules/_dashboard.scss +1 -0
  18. data/app/assets/stylesheets/renalware/modules/_messaging.scss +55 -0
  19. data/app/assets/stylesheets/renalware/modules/_patients.scss +70 -0
  20. data/app/assets/stylesheets/renalware/partials/_button.scss +10 -0
  21. data/app/assets/stylesheets/renalware/partials/_forms.scss +9 -1
  22. data/app/assets/stylesheets/renalware/partials/_lists.scss +6 -1
  23. data/app/assets/stylesheets/renalware/partials/_navigation.scss +36 -1
  24. data/app/assets/stylesheets/renalware/partials/_simple_form.scss +1 -1
  25. data/app/assets/stylesheets/renalware/partials/_tables.scss +40 -1
  26. data/app/controllers/renalware/accesses/assessments_controller.rb +2 -2
  27. data/app/controllers/renalware/accesses/procedures_controller.rb +2 -2
  28. data/app/controllers/renalware/accesses/profiles_controller.rb +2 -2
  29. data/app/controllers/renalware/admin/users_controller.rb +1 -1
  30. data/app/controllers/renalware/base_controller.rb +1 -1
  31. data/app/controllers/renalware/clinical/body_compositions_controller.rb +1 -14
  32. data/app/controllers/renalware/clinical/dry_weights_controller.rb +1 -1
  33. data/app/controllers/renalware/clinics/clinic_visits_controller.rb +3 -3
  34. data/app/controllers/renalware/concerns/pdf_renderable.rb +0 -1
  35. data/app/controllers/renalware/deaths_controller.rb +1 -1
  36. data/app/controllers/renalware/devise/sessions_controller.rb +24 -0
  37. data/app/controllers/renalware/directory/people_controller.rb +30 -20
  38. data/app/controllers/renalware/drugs/drugs_controller.rb +2 -2
  39. data/app/controllers/renalware/events/events_controller.rb +19 -4
  40. data/app/controllers/renalware/events/types_controller.rb +2 -2
  41. data/app/controllers/renalware/hd/cannulation_types_controller.rb +2 -2
  42. data/app/controllers/renalware/hd/current_profile_controller.rb +1 -1
  43. data/app/controllers/renalware/hd/dialysers_controller.rb +2 -2
  44. data/app/controllers/renalware/hd/preference_sets_controller.rb +1 -1
  45. data/app/controllers/renalware/hd/sessions_controller.rb +1 -1
  46. data/app/controllers/renalware/hd/stations_controller.rb +79 -0
  47. data/app/controllers/renalware/hospitals/units_controller.rb +4 -3
  48. data/app/controllers/renalware/letters/contacts_controller.rb +3 -3
  49. data/app/controllers/renalware/letters/letters_controller.rb +2 -2
  50. data/app/controllers/renalware/medications/drug_types/prescriptions_controller.rb +3 -0
  51. data/app/controllers/renalware/messaging/messages_controller.rb +73 -0
  52. data/app/controllers/renalware/messaging/receipts_controller.rb +55 -0
  53. data/app/controllers/renalware/messaging/sent_messages_controller.rb +22 -0
  54. data/app/controllers/renalware/modalities/descriptions_controller.rb +31 -17
  55. data/app/controllers/renalware/modalities/modalities_controller.rb +21 -13
  56. data/app/controllers/renalware/pathology/current_observation_results_controller.rb +1 -1
  57. data/app/controllers/renalware/pathology/historical_observation_results_controller.rb +1 -1
  58. data/app/controllers/renalware/pathology/patient_rules_controller.rb +2 -2
  59. data/app/controllers/renalware/pathology/recent_observation_results_controller.rb +1 -1
  60. data/app/controllers/renalware/pathology/requests/requests_controller.rb +1 -1
  61. data/app/controllers/renalware/patients/alerts_controller.rb +61 -0
  62. data/app/controllers/renalware/patients/clinical_summaries_controller.rb +15 -0
  63. data/app/controllers/renalware/patients/patients_controller.rb +109 -0
  64. data/app/controllers/renalware/patients/primary_care_physicians_controller.rb +3 -2
  65. data/app/controllers/renalware/patients/worry_controller.rb +13 -2
  66. data/app/controllers/renalware/patients/worryboard_controller.rb +15 -1
  67. data/app/controllers/renalware/pd/bag_types_controller.rb +2 -2
  68. data/app/controllers/renalware/pd/exit_site_infections_controller.rb +2 -2
  69. data/app/controllers/renalware/pd/peritonitis_episodes_controller.rb +1 -1
  70. data/app/controllers/renalware/pd/pet_adequacy_results_controller.rb +2 -2
  71. data/app/controllers/renalware/pd/regimes_controller.rb +2 -2
  72. data/app/controllers/renalware/problems/problems_controller.rb +2 -2
  73. data/app/controllers/renalware/system/errors_controller.rb +20 -0
  74. data/app/controllers/renalware/system/mock_errors_controller.rb +12 -0
  75. data/app/controllers/renalware/transplants/donations_controller.rb +2 -2
  76. data/app/controllers/renalware/transplants/donor_operations_controller.rb +2 -2
  77. data/app/controllers/renalware/transplants/donor_workups_controller.rb +1 -1
  78. data/app/controllers/renalware/transplants/recipient_followups_controller.rb +2 -2
  79. data/app/controllers/renalware/transplants/recipient_operations_controller.rb +2 -2
  80. data/app/controllers/renalware/transplants/recipient_workups_controller.rb +1 -1
  81. data/app/controllers/renalware/transplants/registration_statuses_controller.rb +2 -2
  82. data/app/controllers/renalware/transplants/registrations_controller.rb +1 -1
  83. data/app/documents/renalware/renal/profile_document.rb +1 -0
  84. data/app/documents/renalware/smoking_status.rb +9 -0
  85. data/app/helpers/renalware/application_helper.rb +1 -1
  86. data/app/helpers/renalware/navigation_helper.rb +1 -1
  87. data/app/models/concerns/renalware/accountable.rb +16 -1
  88. data/app/models/concerns/renalware/broadcasting.rb +33 -0
  89. data/app/models/renalware/clinical/modality_description.rb +3 -0
  90. data/app/models/renalware/deaths/modality_description.rb +3 -0
  91. data/app/models/renalware/directory/person.rb +1 -1
  92. data/app/models/renalware/events/event.rb +3 -1
  93. data/app/models/renalware/events/event_query.rb +29 -0
  94. data/app/models/renalware/events/line_change_event_query.rb +25 -0
  95. data/app/models/renalware/events/patient_listener.rb +8 -0
  96. data/app/models/renalware/events/simple.rb +1 -1
  97. data/app/models/renalware/hd/diurnal_period_code.rb +9 -0
  98. data/app/models/renalware/hd/mdm_patients_query.rb +1 -0
  99. data/app/models/renalware/hd/modality_description.rb +3 -0
  100. data/app/models/renalware/hd/patient_listener.rb +20 -0
  101. data/app/models/renalware/hd/patients_with_unmet_preferences_query.rb +2 -0
  102. data/app/models/renalware/hd/session/closed.rb +2 -2
  103. data/app/models/renalware/hd/station.rb +24 -0
  104. data/app/models/renalware/hospitals/unit.rb +1 -0
  105. data/app/models/renalware/letters/draft_letter.rb +1 -1
  106. data/app/models/renalware/letters/letter_params_processor.rb +2 -2
  107. data/app/models/renalware/letters/letter_query.rb +1 -1
  108. data/app/models/renalware/letters/part/recent_pathology_results.rb +9 -4
  109. data/app/models/renalware/letters/patient_listener.rb +16 -0
  110. data/app/models/renalware/letters/revise_letter.rb +1 -1
  111. data/app/models/renalware/medications/patient_listener.rb +11 -0
  112. data/app/models/renalware/medications/prescriptions_by_drug_type_query.rb +2 -1
  113. data/app/models/renalware/medications/terminate_all_patient_prescriptions.rb +24 -0
  114. data/app/models/renalware/messaging/author.rb +9 -0
  115. data/app/models/renalware/messaging/message.rb +19 -0
  116. data/app/models/renalware/messaging/message_factory.rb +18 -0
  117. data/app/models/renalware/messaging/message_form.rb +34 -0
  118. data/app/models/renalware/messaging/message_form_builder.rb +50 -0
  119. data/app/models/renalware/messaging/patient.rb +13 -0
  120. data/app/models/renalware/messaging/receipt.rb +19 -0
  121. data/app/models/renalware/messaging/recipient.rb +10 -0
  122. data/app/models/renalware/messaging/recipient_options.rb +85 -0
  123. data/app/models/renalware/messaging/send_message.rb +22 -0
  124. data/app/models/renalware/messaging.rb +21 -0
  125. data/app/models/renalware/modalities/change_patient_modality.rb +112 -0
  126. data/app/models/renalware/modalities/description.rb +9 -5
  127. data/app/models/renalware/modalities/modality.rb +4 -10
  128. data/app/models/renalware/pathology/measurement_unit.rb +10 -0
  129. data/app/models/renalware/pathology/observation_description.rb +2 -0
  130. data/app/models/renalware/pathology/requests/global_algorithm.rb +1 -1
  131. data/app/models/renalware/pathology/requests/high_risk_rule_set.rb +1 -1
  132. data/app/models/renalware/patient.rb +14 -8
  133. data/app/models/renalware/patients/alert.rb +15 -0
  134. data/app/models/renalware/patients/patient_search.rb +13 -0
  135. data/app/models/renalware/patients/summary.rb +13 -0
  136. data/app/models/renalware/patients/worry_query.rb +27 -0
  137. data/app/models/renalware/pd/modality_description.rb +3 -0
  138. data/app/models/renalware/pd.rb +1 -1
  139. data/app/models/renalware/transplants/mdm_patients_query.rb +1 -0
  140. data/app/policies/renalware/hd/station_policy.rb +9 -0
  141. data/app/policies/renalware/messaging/message_policy.rb +11 -0
  142. data/app/policies/renalware/messaging/receipt_policy.rb +19 -0
  143. data/app/policies/renalware/modalities/description_policy.rb +22 -0
  144. data/app/policies/renalware/patients/alert_policy.rb +8 -0
  145. data/app/presenters/renalware/clinical/profile_presenter.rb +6 -1
  146. data/app/presenters/renalware/dashboard/dashboard_presenter.rb +18 -8
  147. data/app/presenters/renalware/events/events_presenter.rb +37 -0
  148. data/app/presenters/renalware/hd/station_presenter.rb +10 -0
  149. data/app/presenters/renalware/messaging/internal_message_presenter.rb +19 -0
  150. data/app/presenters/renalware/messaging/receipt_presenter.rb +11 -0
  151. data/app/presenters/renalware/pd/dashboard_presenter.rb +7 -0
  152. data/app/presenters/renalware/pd/mdm_presenter.rb +4 -0
  153. data/app/views/renalware/admin/users/edit.html.slim +34 -34
  154. data/app/views/renalware/admin/users/index.html.slim +9 -3
  155. data/app/views/renalware/clinical/body_compositions/_form.html.slim +1 -1
  156. data/app/views/renalware/clinical/body_compositions/_list.html.slim +1 -1
  157. data/app/views/renalware/clinical/body_compositions/edit.html.slim +2 -2
  158. data/app/views/renalware/clinics/clinic_visits/_form.html.slim +2 -2
  159. data/app/views/renalware/dashboard/bookmarks/_bookmark.html.slim +4 -5
  160. data/app/views/renalware/dashboard/bookmarks/_table.html.slim +1 -2
  161. data/app/views/renalware/dashboard/dashboards/_content.html.slim +7 -1
  162. data/app/views/renalware/dashboard/letters/_letter.html.slim +1 -1
  163. data/app/views/renalware/deaths/edit.html.slim +23 -26
  164. data/app/views/renalware/deaths/index.html.slim +0 -1
  165. data/app/views/renalware/devise/registrations/edit.html.slim +2 -2
  166. data/app/views/renalware/devise/sessions/new.html.slim +1 -1
  167. data/app/views/renalware/directory/people/_address_form.html.slim +13 -11
  168. data/app/views/renalware/directory/people/_filters.html.slim +9 -0
  169. data/app/views/renalware/directory/people/_form.html.slim +12 -14
  170. data/app/views/renalware/directory/people/_person.html.slim +1 -1
  171. data/app/views/renalware/directory/people/_table.html.slim +10 -0
  172. data/app/views/renalware/directory/people/edit.html.slim +4 -4
  173. data/app/views/renalware/directory/people/index.html.slim +7 -29
  174. data/app/views/renalware/directory/people/new.html.slim +4 -4
  175. data/app/views/renalware/directory/people/show.html.slim +27 -40
  176. data/app/views/renalware/drugs/drugs/_filters.html.slim +11 -0
  177. data/app/views/renalware/drugs/drugs/_form.html.slim +1 -3
  178. data/app/views/renalware/drugs/drugs/edit.html.slim +3 -1
  179. data/app/views/renalware/drugs/drugs/index.html.slim +7 -16
  180. data/app/views/renalware/drugs/drugs/new.html.slim +3 -1
  181. data/app/views/renalware/events/events/_filters.html.slim +21 -0
  182. data/app/views/renalware/events/events/_list.html.slim +5 -0
  183. data/app/views/renalware/events/events/_table.html.slim +3 -3
  184. data/app/views/renalware/events/events/index.html.slim +3 -2
  185. data/app/views/renalware/events/events/simple/_event.html.slim +10 -0
  186. data/app/views/renalware/events/events/simple/_list.html.slim +5 -0
  187. data/app/views/renalware/events/events/simple/_table.html.slim +15 -0
  188. data/app/views/renalware/events/events/toggled_cell/_simple.html.slim +2 -0
  189. data/app/views/renalware/hd/current_profile/_form.html.slim +64 -28
  190. data/app/views/renalware/hd/mdm_patients/_table.html.slim +26 -0
  191. data/app/views/renalware/hd/mdm_patients/index.html.slim +3 -33
  192. data/app/views/renalware/hd/stations/_form.html.slim +11 -0
  193. data/app/views/renalware/hd/stations/_station.html.slim +6 -0
  194. data/app/views/renalware/hd/stations/_table.html.slim +9 -0
  195. data/app/views/renalware/hd/stations/edit.html.slim +8 -0
  196. data/app/views/renalware/hd/stations/index.html.slim +14 -0
  197. data/app/views/renalware/hd/stations/new.html.slim +8 -0
  198. data/app/views/renalware/hospitals/units/_form.html.slim +16 -15
  199. data/app/views/renalware/hospitals/units/edit.html.slim +3 -1
  200. data/app/views/renalware/hospitals/units/index.html.slim +8 -3
  201. data/app/views/renalware/hospitals/units/new.html.slim +3 -1
  202. data/app/views/renalware/layouts/_patient.html.slim +1 -0
  203. data/app/views/renalware/letters/letters/_table.html.slim +1 -1
  204. data/app/views/renalware/letters/letters/author.html.slim +1 -3
  205. data/app/views/renalware/letters/parts/_problems.html.slim +10 -7
  206. data/app/views/renalware/letters/parts/_recent_pathology_results.html.slim +11 -8
  207. data/app/views/renalware/mdm_patients/_table.html.slim +23 -0
  208. data/app/views/renalware/mdm_patients/index.html.slim +5 -28
  209. data/app/views/renalware/medications/prescriptions/_current.html.slim +2 -2
  210. data/app/views/renalware/medications/prescriptions/_recently_stopped.html.slim +1 -1
  211. data/app/views/renalware/messaging/messages/_form.html.slim +31 -0
  212. data/app/views/renalware/messaging/messages/_message.html.slim +19 -0
  213. data/app/views/renalware/messaging/messages/_modal_dialog_placeholder.html.slim +2 -0
  214. data/app/views/renalware/messaging/messages/_send_message_link.html.slim +11 -0
  215. data/app/views/renalware/messaging/messages/_send_reply_link.html.slim +12 -0
  216. data/app/views/renalware/messaging/messages/_table.html.slim +13 -0
  217. data/app/views/renalware/messaging/messages/create.js.erb +13 -0
  218. data/app/views/renalware/messaging/messages/new.html.slim +5 -0
  219. data/app/views/renalware/messaging/messages/new.js.erb +7 -0
  220. data/app/views/renalware/messaging/messages/sent.html.slim +4 -0
  221. data/app/views/renalware/messaging/receipts/_receipt.html.slim +45 -0
  222. data/app/views/renalware/messaging/receipts/_table.html.slim +16 -0
  223. data/app/views/renalware/messaging/receipts/mark_as_read.js.erb +6 -0
  224. data/app/views/renalware/messaging/receipts/read.html.slim +5 -0
  225. data/app/views/renalware/messaging/receipts/unread.html.slim +5 -0
  226. data/app/views/renalware/messaging/shared/_key.html.slim +3 -0
  227. data/app/views/renalware/messaging/shared/_messages_type_tabs.html.slim +7 -0
  228. data/app/views/renalware/modalities/descriptions/_form.html.slim +12 -10
  229. data/app/views/renalware/modalities/descriptions/edit.html.slim +6 -1
  230. data/app/views/renalware/modalities/descriptions/index.html.slim +16 -11
  231. data/app/views/renalware/modalities/descriptions/new.html.slim +6 -1
  232. data/app/views/renalware/navigation/_user.html.slim +1 -0
  233. data/app/views/renalware/pathology/requests/requests/new.html.slim +1 -1
  234. data/app/views/renalware/patients/_layout.html.slim +0 -1
  235. data/app/views/renalware/patients/_person_form_fields.html.slim +1 -0
  236. data/app/views/renalware/patients/{_prescriptions.html.slim → _prescriptions.html.slim.dead} +0 -0
  237. data/app/views/renalware/patients/_side_menu.html.slim +1 -1
  238. data/app/views/renalware/patients/alerts/_alert.html.slim +12 -0
  239. data/app/views/renalware/patients/alerts/_create_alert_link.html.slim +8 -0
  240. data/app/views/renalware/patients/alerts/_form.html.slim +14 -0
  241. data/app/views/renalware/patients/alerts/_list.html.slim +4 -0
  242. data/app/views/renalware/patients/alerts/_modal_dialog_placeholder.html.slim +2 -0
  243. data/app/views/renalware/patients/alerts/create.js.erb +3 -0
  244. data/app/views/renalware/patients/alerts/destroy.js.erb +2 -0
  245. data/app/views/renalware/patients/alerts/new.html.slim +5 -0
  246. data/app/views/renalware/patients/alerts/new.js.erb +4 -0
  247. data/app/views/renalware/patients/bookmarks/_delete.html.slim +4 -3
  248. data/app/views/renalware/patients/bookmarks/_new.html.slim +4 -2
  249. data/app/views/renalware/{clinical_summaries → patients/clinical_summaries}/_events.html.slim +0 -0
  250. data/app/views/renalware/{clinical_summaries → patients/clinical_summaries}/_letters.html.slim +0 -0
  251. data/app/views/renalware/{clinical_summaries → patients/clinical_summaries}/_prescriptions.html.slim +0 -0
  252. data/app/views/renalware/{clinical_summaries → patients/clinical_summaries}/_problems.html.slim +0 -0
  253. data/app/views/renalware/{clinical_summaries → patients/clinical_summaries}/show.html.slim +1 -1
  254. data/app/views/renalware/patients/{_form.html.slim → patients/_form.html.slim} +0 -0
  255. data/app/views/renalware/patients/{_patient.html.slim → patients/_patient.html.slim} +0 -0
  256. data/app/views/renalware/patients/{_table.html.slim → patients/_table.html.slim} +1 -1
  257. data/app/views/renalware/patients/{edit.html.slim → patients/edit.html.slim} +1 -1
  258. data/app/views/renalware/patients/{index.html.slim → patients/index.html.slim} +0 -0
  259. data/app/views/renalware/patients/{new.html.slim → patients/new.html.slim} +1 -1
  260. data/app/views/renalware/patients/{show → patients/show}/_contact_details.html.slim +0 -0
  261. data/app/views/renalware/patients/{show → patients/show}/_hospital_numbers.html.slim +0 -0
  262. data/app/views/renalware/patients/{show → patients/show}/_letter_preferences.html.slim +0 -0
  263. data/app/views/renalware/patients/{show → patients/show}/_patient_demographics.html.slim +0 -0
  264. data/app/views/renalware/patients/{show → patients/show}/_person.html.slim +0 -0
  265. data/app/views/renalware/patients/{show → patients/show}/_primary_care_physician.html.slim +0 -0
  266. data/app/views/renalware/patients/{show → patients/show}/_referral.html.slim +0 -0
  267. data/app/views/renalware/patients/{show → patients/show}/_ukrdc_preferences.html.slim +0 -0
  268. data/app/views/renalware/patients/{show.html.slim → patients/show.html.slim} +7 -7
  269. data/app/views/renalware/patients/side_menu/_actions.html.slim +27 -0
  270. data/app/views/renalware/patients/side_menu/_general.html.slim +4 -2
  271. data/app/views/renalware/patients/side_menu/_modalities.html.slim +2 -2
  272. data/app/views/renalware/patients/side_menu/{_options.html.slim → _options.html.slim.redundant} +5 -0
  273. data/app/views/renalware/patients/side_menu/_transplants.html.slim +2 -1
  274. data/app/views/renalware/patients/worries/_delete.html.slim +4 -3
  275. data/app/views/renalware/patients/worries/_new.html.slim +23 -4
  276. data/app/views/renalware/patients/worryboard/_filters.html.slim +15 -0
  277. data/app/views/renalware/patients/worryboard/_table.html.slim +13 -6
  278. data/app/views/renalware/patients/worryboard/_worry.html.slim +6 -4
  279. data/app/views/renalware/patients/worryboard/show.html.slim +3 -5
  280. data/app/views/renalware/pd/dashboards/show.html.slim +11 -2
  281. data/app/views/renalware/pd/mdm/_top.html.slim +6 -1
  282. data/app/views/renalware/renal/profiles/_form.html.slim +2 -1
  283. data/app/views/renalware/renal/profiles/show.html.slim +1 -1
  284. data/app/views/renalware/shared/documents/_smoking_status.html.slim +1 -0
  285. data/app/views/renalware/shared/documents/_smoking_status_input.html.slim +5 -0
  286. data/app/views/renalware/{errors → system/errors}/internal_server_error.html.slim +0 -0
  287. data/app/views/renalware/{errors → system/errors}/not_found.html.slim +0 -0
  288. data/app/views/renalware/transplants/mdm_patients/_filters.html.slim +6 -7
  289. data/config/cucumber.yml +5 -2
  290. data/config/initializers/renalware.rb +13 -0
  291. data/config/initializers/simple_form_foundation.rb +3 -1
  292. data/config/locales/renalware/dashboard/dashboard.yml +0 -1
  293. data/config/locales/renalware/errors.en.yml +15 -14
  294. data/config/locales/renalware/events/events.yml +5 -0
  295. data/config/locales/renalware/hd/mdm_patients.yml +1 -1
  296. data/config/locales/renalware/hospitals/unit.yml +1 -0
  297. data/config/locales/renalware/mdm.yml +1 -1
  298. data/config/locales/renalware/messaging/messages.en.yml +29 -0
  299. data/config/locales/renalware/patients/alerts.en.yml +10 -0
  300. data/config/locales/renalware/patients/side_menu.en.yml +7 -4
  301. data/config/locales/renalware/patients/worries.en.yml +1 -1
  302. data/config/routes.rb +25 -6
  303. data/config/spring.rb +2 -0
  304. data/db/migrate/20170725120242_add_units_to_pathology_observation_descriptions.rb +19 -0
  305. data/db/migrate/20170809080925_add_notes_to_patient_worries.rb +5 -0
  306. data/db/migrate/20170810092953_create_messaging_messages.rb +13 -0
  307. data/db/migrate/20170810093532_create_messaging_receipts.rb +9 -0
  308. data/db/migrate/20170821100353_add_replying_to_message_id_to_messages.rb +12 -0
  309. data/db/migrate/20170823084127_create_patient_alerts.rb +16 -0
  310. data/db/migrate/20170824113401_add_stations_to_hospital_units.rb +8 -0
  311. data/db/migrate/20170830085137_create_hd_unit_stations.rb +17 -0
  312. data/db/migrate/20170830171726_create_hd_diurnal_period_codes.rb +10 -0
  313. data/db/seeds/default/hd/diurnal_period_codes.csv +4 -0
  314. data/db/seeds/default/hd/diurnal_period_codes.rb +13 -0
  315. data/db/seeds/default/hd/seeds.rb +1 -0
  316. data/db/seeds/default/pathology/measurement_units.csv +38 -0
  317. data/db/seeds/default/pathology/measurement_units.rb +13 -0
  318. data/db/seeds/default/pathology/pathology_observation_descriptions.csv +1741 -1741
  319. data/db/seeds/default/pathology/pathology_observation_descriptions.rb +8 -10
  320. data/db/seeds/default/pathology/seeds.rb +1 -0
  321. data/db/seeds/default/seeds.rb +0 -1
  322. data/db/seeds/default/system/roles.rb +1 -1
  323. data/{app/models → lib}/renalware/breadcrumb.rb +0 -0
  324. data/lib/renalware/configuration.rb +2 -0
  325. data/{app/models → lib}/renalware/failure.rb +0 -0
  326. data/{app/models → lib}/renalware/month_period.rb +0 -0
  327. data/{app/models → lib}/renalware/remembered_preferences.rb +0 -0
  328. data/{app/models → lib}/renalware/service_result.rb +0 -0
  329. data/{app/models → lib}/renalware/success.rb +0 -0
  330. data/lib/renalware/version.rb +1 -1
  331. data/lib/subscription_registry.rb +5 -0
  332. metadata +152 -61
  333. data/app/controllers/renalware/clinical_summaries_controller.rb +0 -13
  334. data/app/controllers/renalware/errors_controller.rb +0 -18
  335. data/app/controllers/renalware/mock_errors_controller.rb +0 -10
  336. data/app/controllers/renalware/patients_controller.rb +0 -107
  337. data/app/models/renalware/patient_search.rb +0 -11
  338. data/app/models/renalware/patient_summary.rb +0 -6
  339. data/app/views/renalware/admin/users/_header.html.slim +0 -6
  340. data/app/views/renalware/clinical/body_compositions/_row.html.slim +0 -15
  341. data/app/views/renalware/clinical/body_compositions/index.html.slim +0 -12
  342. data/app/views/renalware/deaths/_navigation.html.slim +0 -3
  343. data/app/views/renalware/directory/people/_header.html.slim +0 -5
  344. data/app/views/renalware/drugs/drugs/_header.html.slim +0 -5
  345. data/app/views/renalware/hospitals/units/_header.html.slim +0 -5
  346. data/db/seeds/default/hospitals/dialysis_units.csv +0 -7
  347. data/db/seeds/default/hospitals/dialysis_units.rb +0 -17
  348. data/db/seeds/default/hospitals/hospital_centres.csv +0 -86
  349. data/db/seeds/default/hospitals/hospitals.rb +0 -17
  350. data/db/seeds/default/hospitals/seeds.rb +0 -2
@@ -0,0 +1,20 @@
1
+ module Renalware
2
+ module System
3
+ class ErrorsController < ApplicationController
4
+ layout "renalware/layouts/error"
5
+
6
+ def not_found
7
+ render status: 404, formats: [:html]
8
+ end
9
+
10
+ def internal_server_error
11
+ render status: 500, formats: [:html]
12
+ end
13
+
14
+ def generate_test_internal_server_error
15
+ raise "This is an intentionally raised error - please ignore it. " \
16
+ "It is used only to test system integration"
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,12 @@
1
+ require_dependency "renalware"
2
+
3
+ module Renalware
4
+ module System
5
+ class MockErrorsController < BaseController
6
+
7
+ def index
8
+ 0 / 0 # ZeroDivisionError
9
+ end
10
+ end
11
+ end
12
+ end
@@ -22,7 +22,7 @@ module Renalware
22
22
  redirect_to patient_transplants_donor_dashboard_path(patient),
23
23
  notice: t(".success", model_name: "donation")
24
24
  else
25
- flash[:error] = t(".failed", model_name: "donation")
25
+ flash.now[:error] = t(".failed", model_name: "donation")
26
26
  render :new, locals: { patient: patient, donation: donation }
27
27
  end
28
28
  end
@@ -40,7 +40,7 @@ module Renalware
40
40
  redirect_to patient_transplants_donor_dashboard_path(patient),
41
41
  notice: t(".success", model_name: "donation")
42
42
  else
43
- flash[:error] = t(".failed", model_name: "donation")
43
+ flash.now[:error] = t(".failed", model_name: "donation")
44
44
  render :edit, locals: { patient: patient, donation: donation }
45
45
  end
46
46
  end
@@ -22,7 +22,7 @@ module Renalware
22
22
  redirect_to patient_transplants_donor_dashboard_path(patient),
23
23
  notice: t(".success", model_name: "donor operation")
24
24
  else
25
- flash[:error] = t(".failed", model_name: "donor operation")
25
+ flash.now[:error] = t(".failed", model_name: "donor operation")
26
26
  render :new, locals: { operation: operation, patient: patient }
27
27
  end
28
28
  end
@@ -40,7 +40,7 @@ module Renalware
40
40
  redirect_to patient_transplants_donor_dashboard_path(patient),
41
41
  notice: t(".success", model_name: "donor operation")
42
42
  else
43
- flash[:error] = t(".failed", model_name: "donor operation")
43
+ flash.now[:error] = t(".failed", model_name: "donor operation")
44
44
  render :edit, locals: { operation: operation, patient: patient }
45
45
  end
46
46
  end
@@ -23,7 +23,7 @@ module Renalware
23
23
  redirect_to patient_transplants_donor_workup_path(patient),
24
24
  notice: t(".success", model_name: "donor work up")
25
25
  else
26
- flash[:error] = t(".failed", model_name: "donor work up")
26
+ flash.now[:error] = t(".failed", model_name: "donor work up")
27
27
  render :edit, locals: { patient: patient, workup: workup }
28
28
  end
29
29
  end
@@ -25,7 +25,7 @@ module Renalware
25
25
  redirect_to patient_transplants_recipient_dashboard_path(patient),
26
26
  notice: t(".success", model_name: "recipient follow up")
27
27
  else
28
- flash[:error] = t(".failed", model_name: "recipient follow up")
28
+ flash.now[:error] = t(".failed", model_name: "recipient follow up")
29
29
  render :new, locals: { patient: patient, recipient_followup: recipient_followup }
30
30
  end
31
31
  end
@@ -45,7 +45,7 @@ module Renalware
45
45
  redirect_to patient_transplants_recipient_dashboard_path(patient),
46
46
  notice: t(".success", model_name: "recipient follow up")
47
47
  else
48
- flash[:error] = t(".failed", model_name: "recipient follow up")
48
+ flash.now[:error] = t(".failed", model_name: "recipient follow up")
49
49
  render :edit,
50
50
  locals: {
51
51
  patient: patient,
@@ -27,7 +27,7 @@ module Renalware
27
27
  redirect_to patient_transplants_recipient_dashboard_path(patient),
28
28
  notice: t(".success", model_name: "recipient operation")
29
29
  else
30
- flash[:error] = t(".failed", model_name: "recipient operation")
30
+ flash.now[:error] = t(".failed", model_name: "recipient operation")
31
31
  render :new,
32
32
  locals: {
33
33
  patient: patient,
@@ -50,7 +50,7 @@ module Renalware
50
50
  redirect_to patient_transplants_recipient_dashboard_path(patient),
51
51
  notice: t(".success", model_name: "recipient operation")
52
52
  else
53
- flash[:error] = t(".failed", model_name: "recipient operation")
53
+ flash.now[:error] = t(".failed", model_name: "recipient operation")
54
54
  render :edit, locals: { patient: patient, recipient_operation: operation }
55
55
  end
56
56
  end
@@ -32,7 +32,7 @@ module Renalware
32
32
  redirect_to patient_transplants_recipient_workup_path(patient),
33
33
  notice: t(".success", model_name: "recipient work up")
34
34
  else
35
- flash[:error] = t(".failed", model_name: "recipient work up")
35
+ flash.now[:error] = t(".failed", model_name: "recipient work up")
36
36
  render :edit, locals: { patient: patient, workup: workup }
37
37
  end
38
38
  end
@@ -19,7 +19,7 @@ module Renalware
19
19
  redirect_to patient_transplants_recipient_dashboard_path(patient),
20
20
  notice: t(".success", model_name: "registration status")
21
21
  else
22
- flash[:error] = t(".failed", model_name: "registration status")
22
+ flash.now[:error] = t(".failed", model_name: "registration status")
23
23
  render :new, locals: { patient: patient, status: status }
24
24
  end
25
25
  end
@@ -38,7 +38,7 @@ module Renalware
38
38
  redirect_to patient_transplants_recipient_dashboard_path(patient),
39
39
  notice: t(".success", model_name: "registration status")
40
40
  else
41
- flash[:error] = t(".failed", model_name: "registration status")
41
+ flash.now[:error] = t(".failed", model_name: "registration status")
42
42
  render :edit, locals: { patient: patient, status: status }
43
43
  end
44
44
  end
@@ -22,7 +22,7 @@ module Renalware
22
22
  redirect_to patient_transplants_recipient_dashboard_path(patient),
23
23
  notice: t(".success", model_name: "registration")
24
24
  else
25
- flash[:error] = t(".failed", model_name: "registration")
25
+ flash.now[:error] = t(".failed", model_name: "registration")
26
26
  render :edit, locals: { patient: patient, registration: registration }
27
27
  end
28
28
  end
@@ -20,6 +20,7 @@ module Renalware
20
20
  attribute :ischaemic_neuropathic_ulcers, YearDatedConfirmation
21
21
  attribute :non_coronary_intervention, YearDatedConfirmation
22
22
  attribute :dementia, YearDatedConfirmation
23
+ attribute :smoking, SmokingStatus
23
24
  end
24
25
  attribute :comorbidities, Comorbidities
25
26
 
@@ -0,0 +1,9 @@
1
+ require "document/enum"
2
+
3
+ module Renalware
4
+ class SmokingStatus < NestedAttribute
5
+ attribute :value,
6
+ Document::Enum,
7
+ enums: %i(non_smoker ex_smoker current)
8
+ end
9
+ end
@@ -5,7 +5,7 @@ module Renalware
5
5
  module ApplicationHelper
6
6
 
7
7
  def patient_search
8
- ::Renalware::PatientSearch.call(params)
8
+ ::Renalware::Patients::PatientSearch.call(params)
9
9
  end
10
10
 
11
11
  # For use in layouts
@@ -4,7 +4,7 @@ module Renalware
4
4
  # e.g. Engine.routes.url_for({controller: .., action: .., only_path: true})
5
5
  def sub_nav_item(label, path)
6
6
  current_page = current_page?(path)
7
- content_tag(:dd, class: (current_page ? "active" : "")) do
7
+ content_tag(:dd, class: ("active" if current_page)) do
8
8
  link_to label, path
9
9
  end
10
10
  end
@@ -1,7 +1,7 @@
1
1
  require_dependency "renalware"
2
2
 
3
3
  module Renalware
4
- # Reponsible for assigning a system user to the record when it is created
4
+ # Responsible for assigning a system user to the record when it is created
5
5
  # and updated.
6
6
  #
7
7
  # @example
@@ -27,6 +27,21 @@ module Renalware
27
27
  scope :with_updated_by, -> { includes(:updated_by) }
28
28
  end
29
29
 
30
+ def save_by!(user)
31
+ self.by = user
32
+ save!
33
+ end
34
+
35
+ def save_by(user)
36
+ self.by = user
37
+ save
38
+ end
39
+
40
+ def update_by(user, attrs)
41
+ self.by = user
42
+ update(attrs)
43
+ end
44
+
30
45
  private
31
46
 
32
47
  def assign_creator
@@ -0,0 +1,33 @@
1
+ require_dependency "renalware"
2
+
3
+ module Renalware
4
+ module Broadcasting
5
+ include Wisper::Publisher
6
+ extend ActiveSupport::Concern
7
+
8
+ # Subscribes any listeners configured in Renalware.config.broadcast_subscription_map
9
+ # to the current instance.
10
+ #
11
+ # Example usage
12
+ #
13
+ # class SomeServiceObject
14
+ # include Broadcasting
15
+ #
16
+ # def call
17
+ # ..
18
+ # end
19
+ # end
20
+ #
21
+ # SomeServiceObject.new(..).broadcasting_to_configured_subscribers.call(..)
22
+ #
23
+ # See https://github.com/krisleech/wisper
24
+ #
25
+ def broadcasting_to_configured_subscribers
26
+ subscribers = Renalware.config.broadcast_subscription_map[self.class.name]
27
+ Array(subscribers).each{ |listener|
28
+ subscribe(listener.to_s.constantize.new)
29
+ }
30
+ self
31
+ end
32
+ end
33
+ end
@@ -3,6 +3,9 @@ require_dependency "renalware/clinical"
3
3
  module Renalware
4
4
  module Clinical
5
5
  class ModalityDescription < Modalities::Description
6
+ def to_sym
7
+ :clinical
8
+ end
6
9
  end
7
10
  end
8
11
  end
@@ -3,6 +3,9 @@ require_dependency "renalware/deaths"
3
3
  module Renalware
4
4
  module Deaths
5
5
  class ModalityDescription < Modalities::Description
6
+ def to_sym
7
+ :death
8
+ end
6
9
  end
7
10
  end
8
11
  end
@@ -18,7 +18,7 @@ module Renalware
18
18
  end
19
19
 
20
20
  def self.build(attributes = {})
21
- person = self.new(attributes)
21
+ person = new(attributes)
22
22
  person.build_address
23
23
  person
24
24
  end
@@ -16,7 +16,9 @@ module Renalware
16
16
  belongs_to :patient, touch: true
17
17
  belongs_to :event_type, class_name: "Type"
18
18
 
19
- validates :patient, :date_time, presence: true
19
+ validates :patient, presence: true
20
+ validates :date_time, presence: true
21
+ validates :event_type_id, presence: true
20
22
  validates :date_time, timeliness: { type: :datetime }
21
23
 
22
24
  scope :ordered, -> { order(date_time: :desc, updated_at: :desc) }
@@ -0,0 +1,29 @@
1
+ require_dependency "renalware/clinics"
2
+
3
+ module Renalware
4
+ module Events
5
+ class EventQuery
6
+ attr_reader :query, :patient
7
+
8
+ def initialize(patient:, query: {})
9
+ @query = query
10
+ @patient = patient
11
+ @query[:s] = "created_at DESC" if @query[:s].blank?
12
+ end
13
+
14
+ def call
15
+ search.result.for_patient(patient)
16
+ .includes(:event_type)
17
+ .eager_load(:event_type)
18
+ .includes(:created_by)
19
+ .eager_load(:created_by)
20
+ .page(query[:page]).per(query[:per_page])
21
+ .ordered
22
+ end
23
+
24
+ def search
25
+ @search ||= Event.ransack(query)
26
+ end
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,25 @@
1
+ require_dependency "renalware/clinics"
2
+
3
+ module Renalware
4
+ module Events
5
+ class LineChangeEventQuery
6
+ attr_reader :patient
7
+
8
+ def initialize(patient)
9
+ @patient = patient
10
+ end
11
+
12
+ def call(limit: 1)
13
+ return [] if event_type.nil?
14
+ Event.for_patient(patient)
15
+ .where(event_type_id: event_type.id)
16
+ .order(date_time: :desc)
17
+ .limit(limit)
18
+ end
19
+
20
+ def event_type
21
+ @event_type ||= Renalware::Events::Type.find_by(slug: :pd_line_changes)
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,8 @@
1
+ require_dependency "renalware/events"
2
+
3
+ module Renalware
4
+ module Events
5
+ class PatientListener
6
+ end
7
+ end
8
+ end
@@ -3,7 +3,7 @@ require_dependency "renalware/events"
3
3
  module Renalware
4
4
  module Events
5
5
  class Simple < Event
6
-
6
+ validates :description, presence: true
7
7
  end
8
8
  end
9
9
  end
@@ -0,0 +1,9 @@
1
+ require_dependency "renalware/hd"
2
+
3
+ module Renalware
4
+ module HD
5
+ class DiurnalPeriodCode < ApplicationRecord
6
+ validates :code, presence: true, uniqueness: true
7
+ end
8
+ end
9
+ end
@@ -17,6 +17,7 @@ module Renalware
17
17
  def search
18
18
  @search ||= begin
19
19
  relation
20
+ .includes(:hd_profile)
20
21
  .extending(ModalityScopes)
21
22
  .extending(Scopes)
22
23
  .with_current_key_pathology
@@ -3,6 +3,9 @@ require_dependency "renalware/hd"
3
3
  module Renalware
4
4
  module HD
5
5
  class ModalityDescription < Modalities::Description
6
+ def to_sym
7
+ :hd
8
+ end
6
9
  end
7
10
  end
8
11
  end
@@ -0,0 +1,20 @@
1
+ # rubocop:disable Rails/SkipsModelValidations
2
+ module Renalware
3
+ module HD
4
+ class PatientListener
5
+ def patient_modality_changed_to_death(patient:, modality:, actor:)
6
+ nullify_significant_hd_profile_attributes(patient, by: actor)
7
+ end
8
+
9
+ private
10
+
11
+ def nullify_significant_hd_profile_attributes(patient, by:)
12
+ hd_profile = HD.cast_patient(patient).hd_profile
13
+ return if hd_profile.nil?
14
+ hd_profile.hospital_unit = nil
15
+ hd_profile.schedule = nil
16
+ hd_profile.save_by!(by)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -15,6 +15,8 @@ module Renalware
15
15
  def search
16
16
  HD::Patient
17
17
  .extend(Scopes)
18
+ .includes(hd_profile: :hospital_unit)
19
+ .includes(hd_preference_set: :hospital_unit)
18
20
  .eager_load(:hd_profile)
19
21
  .eager_load(:hd_preference_set)
20
22
  .having_an_unmet_preference
@@ -31,8 +31,8 @@ module Renalware
31
31
 
32
32
  class Observations < Renalware::HD::SessionDocument::Observations
33
33
  validates_presence_of :pulse, :blood_pressure, :weight_measured, :temperature_measured
34
- validates_presence_of :weight, if: "weight_measured.try!(:yes?)"
35
- validates_presence_of :temperature, if: "temperature_measured.try!(:yes?)"
34
+ validates_presence_of :weight, if: ->{ weight_measured&.yes? }
35
+ validates_presence_of :temperature, if: ->{ temperature_measured&.yes? }
36
36
  validates :blood_pressure, "renalware/patients/blood_pressure_presence" => true
37
37
  end
38
38
  attribute :observations_before, Observations
@@ -0,0 +1,24 @@
1
+ # To override the values in the location enum use something like this:
2
+ # module CustomizeHDStationLocationEnum
3
+ # extend Enumerize
4
+ # enumerize :location, in: %i(side_room ante_room cubicle)
5
+ # end
6
+ # Renalware::HD::Station.singleton_class.send(:prepend, CustomizeHDStationLocationEnum)
7
+ #
8
+ require_dependency "renalware/hd"
9
+
10
+ module Renalware
11
+ module HD
12
+ class Station < ApplicationRecord
13
+ extend Enumerize
14
+ include Accountable
15
+ validates :hospital_unit_id, presence: true
16
+ validates :name, uniqueness: { scope: :hospital_unit_id }
17
+
18
+ enumerize :location, in: %i(side_room)
19
+
20
+ scope :for_unit, ->(id){ where(hospital_unit_id: id) }
21
+ scope :ordered, ->{ order(position: :asc) }
22
+ end
23
+ end
24
+ end
@@ -12,6 +12,7 @@ module Renalware
12
12
  validates :name, presence: true
13
13
  validates :renal_registry_code, presence: true
14
14
  validates :unit_type, presence: true
15
+ validates :number_of_hd_stations, numericality: { allow_blank: true, only_integer: true }
15
16
 
16
17
  enumerize :unit_type, in: %i(hospital satellite home)
17
18
 
@@ -6,7 +6,7 @@ module Renalware
6
6
  include Wisper::Publisher
7
7
 
8
8
  def self.build
9
- self.new
9
+ new
10
10
  end
11
11
 
12
12
  def call(patient, params = {})
@@ -18,7 +18,7 @@ module Renalware
18
18
  private
19
19
 
20
20
  def process_main_recipient_attributes(params)
21
- return params unless params.has_key?(:main_recipient_attributes)
21
+ return params unless params.key?(:main_recipient_attributes)
22
22
 
23
23
  params.merge(
24
24
  main_recipient_attributes: main_recipient_attributes(params)
@@ -26,7 +26,7 @@ module Renalware
26
26
  end
27
27
 
28
28
  def process_cc_recipients_attributes(params)
29
- return params unless params.has_key?(:cc_recipients_attributes)
29
+ return params unless params.key?(:cc_recipients_attributes)
30
30
 
31
31
  params.merge(
32
32
  cc_recipients_attributes: cc_recipients_attributes(params)
@@ -27,7 +27,7 @@ module Renalware
27
27
  end
28
28
 
29
29
  def search
30
- @search ||= Letter.extend(QueryableLetter).search(@q)
30
+ @search ||= Letter.extend(QueryableLetter).includes(:event).search(@q)
31
31
  end
32
32
  end
33
33
  end
@@ -4,7 +4,7 @@ module Renalware
4
4
  module Letters
5
5
  class Part::RecentPathologyResults < Part
6
6
 
7
- delegate :each, :present?, to: :recent_pathology_results
7
+ delegate :each, :any?, :present?, to: :recent_pathology_results
8
8
 
9
9
  def to_partial_path
10
10
  "renalware/letters/parts/recent_pathology_results"
@@ -19,9 +19,14 @@ module Renalware
19
19
  def find_recent_pathology_results
20
20
  presenter = Pathology::CurrentObservationResults::Presenter.new
21
21
  descriptions = Letters::RelevantObservationDescription.all
22
- results = Pathology::CurrentObservationsForDescriptionsQuery
23
- .new(patient: @patient, descriptions: descriptions)
24
- .call
22
+ query = Pathology::CurrentObservationsForDescriptionsQuery.new(
23
+ patient: @patient,
24
+ descriptions: descriptions
25
+ )
26
+
27
+ # Only select display result with a value
28
+ results = query.call.reject{ |result| result.result.blank? }
29
+
25
30
  # Removes the header from the results, this will be unnecessary when
26
31
  # a custom Presenter is implemented
27
32
  presenter.present(results)[1..-1]
@@ -0,0 +1,16 @@
1
+ # rubocop:disable Rails/SkipsModelValidations
2
+ module Renalware
3
+ module Letters
4
+ class PatientListener
5
+ def patient_modality_changed_to_death(patient:, modality:, actor:)
6
+ # Using update_columns here (bypassing validation) because currently, once the Death
7
+ # modality is assigned, attempting to update the patient triggers validation
8
+ # on cause_of_death which will at this stage be missing.
9
+ patient.update_columns(
10
+ cc_on_all_letters: false,
11
+ cc_decision_on: modality.started_on
12
+ )
13
+ end
14
+ end
15
+ end
16
+ end
@@ -6,7 +6,7 @@ module Renalware
6
6
  include Wisper::Publisher
7
7
 
8
8
  def self.build
9
- self.new
9
+ new
10
10
  end
11
11
 
12
12
  def call(patient, letter_id, params = {})
@@ -0,0 +1,11 @@
1
+ require_dependency "renalware/medications"
2
+
3
+ module Renalware
4
+ module Medications
5
+ class PatientListener
6
+ def patient_modality_changed_to_death(patient:, modality:, actor:)
7
+ TerminateAllPatientPrescriptions.call(patient: patient, by: actor)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -17,7 +17,8 @@ module Renalware
17
17
  @search ||= begin
18
18
  Prescription
19
19
  .current
20
- .includes(:medication_route, :patient, :drug)
20
+ .includes(:medication_route, :drug)
21
+ .includes(patient: { current_modality: :description })
21
22
  .eager_load(drug: [:drug_types])
22
23
  .where("lower(drug_types.name) = lower(?)", drug_type_name)
23
24
  .search(search_params)
@@ -0,0 +1,24 @@
1
+ require_dependency "renalware/medications"
2
+
3
+ module Renalware
4
+ module Medications
5
+ class TerminateAllPatientPrescriptions
6
+ attr_reader :patient, :by
7
+
8
+ def self.call(patient:, by:)
9
+ new(patient, by).call
10
+ end
11
+
12
+ def initialize(patient, by)
13
+ @patient = patient
14
+ @by = by
15
+ end
16
+
17
+ def call
18
+ patient.prescriptions.each do |prescription|
19
+ prescription.terminate(by: by).save!
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,9 @@
1
+ require_dependency "renalware/messaging"
2
+
3
+ module Renalware
4
+ module Messaging
5
+ class Author < ActiveType::Record[Renalware::User]
6
+ has_many :messages
7
+ end
8
+ end
9
+ end