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
@@ -21,7 +21,7 @@ module Renalware
21
21
  redirect_to patient_accesses_dashboard_path(patient),
22
22
  notice: t(".success", model_name: "Access profile")
23
23
  else
24
- flash[:error] = t(".failed", model_name: "Access profile")
24
+ flash.now[:error] = t(".failed", model_name: "Access profile")
25
25
  render :new, locals: { patient: patient, profile: profile }
26
26
  end
27
27
  end
@@ -38,7 +38,7 @@ module Renalware
38
38
  redirect_to patient_accesses_dashboard_path(patient),
39
39
  notice: t(".success", model_name: "Access profile")
40
40
  else
41
- flash[:error] = t(".failed", model_name: "Access profile")
41
+ flash.now[:error] = t(".failed", model_name: "Access profile")
42
42
  render :edit, locals: { patient: patient, profile: profile }
43
43
  end
44
44
  end
@@ -19,7 +19,7 @@ module Renalware
19
19
  redirect_to admin_users_path,
20
20
  notice: t(".success", model_name: "user")
21
21
  else
22
- flash[:error] = t(".failed", model_name: "user")
22
+ flash.now[:error] = t(".failed", model_name: "user")
23
23
  render :edit
24
24
  end
25
25
  end
@@ -27,7 +27,7 @@ module Renalware
27
27
  protected
28
28
 
29
29
  def patient_search
30
- PatientSearch.call(params)
30
+ Patients::PatientSearch.call(params)
31
31
  end
32
32
 
33
33
  def success_msg_for(model_name)
@@ -6,20 +6,8 @@ module Renalware
6
6
  class BodyCompositionsController < Clinical::BaseController
7
7
  before_action :load_patient
8
8
 
9
- def index
10
- query = PatientBodyCompositionsQuery.new(patient: patient, search_params: params[:q])
11
- body_compositions = query.call.page(params[:page]).per(15)
12
-
13
- render locals: {
14
- search: query.search,
15
- body_compositions: CollectionPresenter.new(body_compositions, BodyCompositionPresenter),
16
- patient: patient
17
- }
18
- end
19
-
20
9
  def show
21
10
  body_composition = find_body_composition
22
- @body_composition = BodyCompositionPresenter.new(body_composition)
23
11
  render locals: { patient: patient, body_composition: body_composition }
24
12
  end
25
13
 
@@ -38,14 +26,13 @@ module Renalware
38
26
  redirect_to patient_clinical_profile_path(@patient),
39
27
  notice: t(".success", model_name: "body composition")
40
28
  else
41
- flash[:error] = t(".failed", model_name: "body composition")
29
+ flash.now[:error] = t(".failed", model_name: "body composition")
42
30
  render_new(body_composition)
43
31
  end
44
32
  end
45
33
 
46
34
  def edit
47
35
  body_composition = find_body_composition
48
- @body_composition = body_composition
49
36
  render locals: { patient: patient, body_composition: body_composition }
50
37
  end
51
38
 
@@ -41,7 +41,7 @@ module Renalware
41
41
  redirect_to return_url, notice: t(".success", model_name: "dry weight")
42
42
  session.delete(:return_to)
43
43
  else
44
- flash[:error] = t(".failed", model_name: "dry weight")
44
+ flash.now[:error] = t(".failed", model_name: "dry weight")
45
45
  render_new(dry_weight)
46
46
  end
47
47
  end
@@ -8,7 +8,7 @@ module Renalware
8
8
  def index
9
9
  render locals: {
10
10
  patient: patient,
11
- clinic_visits: patient.clinic_visits.ordered
11
+ clinic_visits: patient.clinic_visits.includes([:clinic, :created_by]).ordered
12
12
  }
13
13
  end
14
14
 
@@ -33,7 +33,7 @@ module Renalware
33
33
  notice = success_msg_for("clinic visit")
34
34
  redirect_to patient_clinic_visits_path(patient), notice: notice
35
35
  else
36
- flash[:error] = failed_msg_for("clinic visit")
36
+ flash.now[:error] = failed_msg_for("clinic visit")
37
37
  render :new, locals: {
38
38
  patient: patient,
39
39
  clinic_visit: visit,
@@ -47,7 +47,7 @@ module Renalware
47
47
  redirect_to patient_clinic_visits_path(@patient),
48
48
  notice: t(".success", model_name: "clinic visit")
49
49
  else
50
- flash[:error] = t(".failed", model_name: "clinic visit")
50
+ flash.now[:error] = t(".failed", model_name: "clinic visit")
51
51
  render :edit
52
52
  end
53
53
  end
@@ -20,7 +20,6 @@ module Renalware
20
20
  }
21
21
  end
22
22
 
23
-
24
23
  # Render a Liquid template loaded from the database.
25
24
  # The template may have variable place holders w.g. {{ patient.name }} and these
26
25
  # are resolved by passing instance of Liquid Drops (presenters) in the variables hash.
@@ -16,7 +16,7 @@ module Renalware
16
16
  redirect_to patient_clinical_profile_path(@patient),
17
17
  notice: t(".success", model_name: "patient")
18
18
  else
19
- flash[:error] = t(".failed", model_name: "patient")
19
+ flash.now[:error] = t(".failed", model_name: "patient")
20
20
  render :edit
21
21
  end
22
22
  end
@@ -4,5 +4,29 @@ module Renalware
4
4
 
5
5
  layout "renalware/layouts/application"
6
6
 
7
+ # Define the path to go to after logging in:
8
+ # - if the user has never before logged-in, devise will take them to the root path (dashboard)
9
+ # - if the user's session timed-out less that 30 minutes ago, we take them back to the
10
+ # last page they were on.
11
+ # - if the user's session timed-out more than 30 minutes ago, we take them back to the
12
+ # their dashboard. See PR #1592 for rationale.
13
+ # - if the user has explicitly logged-out they will always go the the dashboard path on login,
14
+ # regardless of how long ago they signed out, because in this instance devise removes it's
15
+ # entries in the session cookie.
16
+ def after_sign_in_path_for(resource)
17
+ max_duration_of_url_memory = Renalware.config.duration_of_last_url_memory_after_session_expiry
18
+ max_duration_has_passed = last_sign_in_at <= max_duration_of_url_memory.ago
19
+ max_duration_has_passed ? dashboard_path : super
20
+ end
21
+
22
+ private
23
+
24
+ def last_sign_in_at
25
+ current_user.last_sign_in_at || epoch_start
26
+ end
27
+
28
+ def epoch_start
29
+ Date.new(0)
30
+ end
7
31
  end
8
32
  end
@@ -8,10 +8,9 @@ module Renalware
8
8
 
9
9
  def index
10
10
  query = PersonQuery.new(q: params[:q])
11
- @people = call_query(query).page(page)
12
- authorize @people
13
-
14
- @q = query.search
11
+ people = call_query(query).page(page)
12
+ authorize people
13
+ render locals: { q: query.search, people: people }
15
14
  end
16
15
 
17
16
  def search
@@ -22,45 +21,56 @@ module Renalware
22
21
  end
23
22
 
24
23
  def show
25
- @person = Person.find(params[:id])
26
- authorize @person
24
+ person = Person.find(params[:id])
25
+ authorize person
26
+ render locals: { person: person }
27
27
  end
28
28
 
29
29
  def new
30
- @person = Person.build
31
- authorize @person
30
+ person = Person.build
31
+ authorize person
32
+ render_new(person)
32
33
  end
33
34
 
34
35
  def create
35
- @person = Person.new(person_params)
36
- authorize @person
36
+ person = Person.new(person_params)
37
+ authorize person
37
38
 
38
- if @person.save
39
+ if person.save
39
40
  redirect_to directory_people_path, notice: t(".success", model_name: "Directory person")
40
41
  else
41
- flash[:error] = t(".failed", model_name: "Directory person")
42
- render :new
42
+ flash.now[:error] = t(".failed", model_name: "Directory person")
43
+ render_new(person)
43
44
  end
44
45
  end
45
46
 
46
47
  def edit
47
- @person = Person.find(params[:id])
48
- authorize @person
48
+ person = Person.find(params[:id])
49
+ authorize person
50
+ render_edit(person)
49
51
  end
50
52
 
51
53
  def update
52
- @person = Person.find(params[:id])
53
- authorize @person
54
- if @person.update(person_params)
54
+ person = Person.find(params[:id])
55
+ authorize person
56
+ if person.update(person_params)
55
57
  redirect_to directory_people_path, notice: t(".success", model_name: "Directory person")
56
58
  else
57
- flash[:error] = t(".failed", model_name: "Directory person")
58
- render :edit
59
+ flash.now[:error] = t(".failed", model_name: "Directory person")
60
+ render_edit(person)
59
61
  end
60
62
  end
61
63
 
62
64
  private
63
65
 
66
+ def render_edit(person)
67
+ render :edit, locals: { person: person }
68
+ end
69
+
70
+ def render_new(person)
71
+ render :new, locals: { person: person }
72
+ end
73
+
64
74
  def call_query(query)
65
75
  query
66
76
  .call
@@ -28,7 +28,7 @@ module Renalware
28
28
  redirect_to drugs_drugs_path,
29
29
  notice: t(".success", model_name: "drug")
30
30
  else
31
- flash[:error] = t(".failed", model_name: "drug")
31
+ flash.now[:error] = t(".failed", model_name: "drug")
32
32
  render :new
33
33
  end
34
34
  end
@@ -58,7 +58,7 @@ module Renalware
58
58
  redirect_to drugs_drugs_path,
59
59
  notice: t(".success", model_name: "drug")
60
60
  else
61
- flash[:error] = t(".failed", model_name: "drug")
61
+ flash.now[:error] = t(".failed", model_name: "drug")
62
62
  render :edit
63
63
  end
64
64
  end
@@ -17,10 +17,11 @@ module Renalware
17
17
 
18
18
  def create
19
19
  event = new_event_for_patient(event_params)
20
+
20
21
  if event.save
21
22
  redirect_to return_url, notice: t(".success", model_name: "event")
22
23
  else
23
- flash[:error] = t(".failed", model_name: "event")
24
+ flash.now[:error] = t(".failed", model_name: "event")
24
25
  render :new, locals: {
25
26
  patient: patient,
26
27
  event: event,
@@ -30,10 +31,14 @@ module Renalware
30
31
  end
31
32
 
32
33
  def index
34
+ events_query = EventQuery.new(patient: patient, query: query_params)
35
+ events = events_query.call
33
36
  authorize events
37
+ events = EventsPresenter.new(patient, events)
38
+
34
39
  render locals: {
35
- patient: patient,
36
- events: events
40
+ events: events,
41
+ query: events_query.search
37
42
  }
38
43
  end
39
44
 
@@ -50,7 +55,7 @@ module Renalware
50
55
  if event.update(event_params)
51
56
  redirect_to return_url, notice: t(".success", model_name: "event")
52
57
  else
53
- flash[:error] = failed_msg_for("event type")
58
+ flash.now[:error] = failed_msg_for("event type")
54
59
  render :edit, locals: {
55
60
  patient: patient,
56
61
  event: event,
@@ -143,6 +148,10 @@ module Renalware
143
148
  def new_event_for_patient(params = {})
144
149
  event = event_class.new
145
150
  event.attributes = params
151
+ # Need to set disable_selection_of_event_type explicitly rather than relying on the value
152
+ # in the params which is a string eg "false" which actually evaluates to true!
153
+ # i.e. (!!"false" == true)
154
+ event.disable_selection_of_event_type = disable_selection_of_event_type?
146
155
  event.patient = patient
147
156
  authorize event
148
157
  event
@@ -161,6 +170,12 @@ module Renalware
161
170
  ]
162
171
  end
163
172
  end
173
+
174
+ def query_params
175
+ params
176
+ .fetch(:q, {})
177
+ .merge(page: page, per_page: per_page || 20)
178
+ end
164
179
  end
165
180
  end
166
181
  end
@@ -15,7 +15,7 @@ module Renalware
15
15
  if event_type.save
16
16
  redirect_to events_types_path, notice: success_msg_for("event type")
17
17
  else
18
- flash[:error] = failed_msg_for("event type")
18
+ flash.now[:error] = failed_msg_for("event type")
19
19
  render :new, locals: { event_type: event_type }
20
20
  end
21
21
  end
@@ -36,7 +36,7 @@ module Renalware
36
36
  if event_type.update(event_params)
37
37
  redirect_to events_types_path, notice: success_msg_for("event type")
38
38
  else
39
- flash[:error] = failed_msg_for("event type")
39
+ flash.now[:error] = failed_msg_for("event type")
40
40
  render :edit, locals: { event_type: event_type }
41
41
  end
42
42
  end
@@ -18,7 +18,7 @@ module Renalware
18
18
  redirect_to hd_cannulation_types_path,
19
19
  notice: t(".success", model_name: "cannulation type")
20
20
  else
21
- flash[:error] = t(".failed", model_name: "cannulation type")
21
+ flash.now[:error] = t(".failed", model_name: "cannulation type")
22
22
  render :new
23
23
  end
24
24
  end
@@ -33,7 +33,7 @@ module Renalware
33
33
  redirect_to hd_cannulation_types_path,
34
34
  notice: t(".success", model_name: "cannulation type")
35
35
  else
36
- flash[:error] = t(".failed", model_name: "cannulation type")
36
+ flash.now[:error] = t(".failed", model_name: "cannulation type")
37
37
  render :edit
38
38
  end
39
39
  end
@@ -19,7 +19,7 @@ module Renalware
19
19
  redirect_to patient_hd_dashboard_path(patient),
20
20
  notice: t(".success", model_name: "HD profile")
21
21
  else
22
- flash[:error] = t(".failed", model_name: "HD profile")
22
+ flash.now[:error] = t(".failed", model_name: "HD profile")
23
23
  render :edit, locals: locals
24
24
  end
25
25
  end
@@ -16,7 +16,7 @@ module Renalware
16
16
  if dialyser.save
17
17
  redirect_to hd_dialysers_path, notice: success_msg_for("dialyser")
18
18
  else
19
- flash[:error] = failed_msg_for("dialyser")
19
+ flash.now[:error] = failed_msg_for("dialyser")
20
20
  render :new, locals: { dialyser: dialyser }
21
21
  end
22
22
  end
@@ -37,7 +37,7 @@ module Renalware
37
37
  if dialyser.update(dialyser_params)
38
38
  redirect_to hd_dialysers_path, notice: success_msg_for("dialyser")
39
39
  else
40
- flash[:error] = failed_msg_for("dialyser")
40
+ flash.now[:error] = failed_msg_for("dialyser")
41
41
  render :edit, locals: { dialyser: dialyser }
42
42
  end
43
43
  end
@@ -17,7 +17,7 @@ module Renalware
17
17
  redirect_to patient_hd_dashboard_path(patient),
18
18
  notice: t(".success", model_name: "HD preferences")
19
19
  else
20
- flash[:error] = t(".failed", model_name: "HD preferences")
20
+ flash.now[:error] = t(".failed", model_name: "HD preferences")
21
21
  render :edit, locals: { patient: patient, preference_set: preference_set }
22
22
  end
23
23
  end
@@ -74,7 +74,7 @@ module Renalware
74
74
  end
75
75
 
76
76
  def save_failure(session)
77
- flash[:error] = t(".failed", model_name: "HD session")
77
+ flash.now[:error] = t(".failed", model_name: "HD session")
78
78
  action = action_name.to_sym == :create ? :new : :edit
79
79
  render action, locals: locals(session)
80
80
  end
@@ -0,0 +1,79 @@
1
+ require_dependency "renalware/hd/base_controller"
2
+ require "collection_presenter"
3
+
4
+ module Renalware
5
+ module HD
6
+ class StationsController < BaseController
7
+ include PresenterHelper
8
+
9
+ def index
10
+ stations = Station.for_unit(unit_id).ordered
11
+ authorize stations
12
+ render locals: {
13
+ unit_id: unit_id,
14
+ stations: present(stations, StationPresenter)
15
+ }
16
+ end
17
+
18
+ def new
19
+ station = Station.new(hospital_unit_id: unit_id)
20
+ station.by = current_user
21
+ authorize station
22
+ render_new(station)
23
+ end
24
+
25
+ def create
26
+ station = Station.new(station_params.merge!(hospital_unit_id: unit_id))
27
+ authorize station
28
+ if station.save_by(current_user)
29
+ redirect_to hd_unit_stations_path(unit_id: unit_id), notice: success_msg_for("station")
30
+ else
31
+ render_new(station)
32
+ end
33
+ end
34
+
35
+ def edit
36
+ authorize station
37
+ render_edit(station)
38
+ end
39
+
40
+ def update
41
+ authorize station
42
+ if station.update_by(current_user, station_params)
43
+ redirect_to hd_unit_stations_path(unit_id: unit_id), notice: success_msg_for("station")
44
+ else
45
+ render_edit(station)
46
+ end
47
+ end
48
+
49
+ def sort
50
+ authorize Station, :sort?
51
+ ids = params["hd-station"]
52
+ Station.sort(ids)
53
+ render json: ids
54
+ end
55
+
56
+ private
57
+
58
+ def render_new(station)
59
+ render :new, locals: { unit_id: unit_id, station: station }
60
+ end
61
+
62
+ def render_edit(station)
63
+ render :edit, locals: { unit_id: unit_id, station: station }
64
+ end
65
+
66
+ def unit_id
67
+ params[:unit_id]
68
+ end
69
+
70
+ def station
71
+ @station ||= Station.find(params[:id])
72
+ end
73
+
74
+ def station_params
75
+ params.require(:hd_station).permit(:name, :location)
76
+ end
77
+ end
78
+ end
79
+ end
@@ -18,7 +18,7 @@ module Renalware
18
18
  redirect_to hospitals_units_path,
19
19
  notice: t(".success", model_name: "hospital unit")
20
20
  else
21
- flash[:error] = t(".failed", model_name: "hospital unit")
21
+ flash.now[:error] = t(".failed", model_name: "hospital unit")
22
22
  render :new
23
23
  end
24
24
  end
@@ -33,7 +33,7 @@ module Renalware
33
33
  redirect_to hospitals_units_path,
34
34
  notice: t(".success", model_name: "hospital unit")
35
35
  else
36
- flash[:error] = t(".failed", model_name: "hospital unit")
36
+ flash.now[:error] = t(".failed", model_name: "hospital unit")
37
37
  render :edit
38
38
  end
39
39
  end
@@ -48,7 +48,8 @@ module Renalware
48
48
 
49
49
  def hospital_unit_params
50
50
  params.require(:hospitals_unit).permit(
51
- :name, :unit_code, :renal_registry_code, :unit_type, :is_hd_site, :hospital_centre_id
51
+ :name, :unit_code, :renal_registry_code, :unit_type, :hospital_centre_id,
52
+ :is_hd_site, :number_of_hd_stations
52
53
  )
53
54
  end
54
55
 
@@ -38,7 +38,7 @@ module Renalware
38
38
  end
39
39
 
40
40
  def find_contacts
41
- CollectionPresenter.new(@patient.contacts.ordered, ContactPresenter)
41
+ CollectionPresenter.new(@patient.contacts.includes(:description).ordered, ContactPresenter)
42
42
  end
43
43
 
44
44
  def find_contact_descriptions
@@ -77,9 +77,9 @@ module Renalware
77
77
  # if we are creating the person for the contact at the same time.
78
78
  #
79
79
  def try_merge_person_creator(params)
80
- return params unless params[:person_attributes].present?
80
+ return params if params[:person_attributes].blank?
81
81
 
82
- params[:person_attributes].merge!(by: current_user)
82
+ params[:person_attributes][:by] = current_user
83
83
  params
84
84
  end
85
85
  end
@@ -56,7 +56,7 @@ module Renalware
56
56
  end
57
57
 
58
58
  def draft_letter_failed(letter)
59
- flash[:error] = t(".failed", model_name: "Letter")
59
+ flash.now[:error] = t(".failed", model_name: "Letter")
60
60
  render_form(letter, :new)
61
61
  end
62
62
 
@@ -79,7 +79,7 @@ module Renalware
79
79
  end
80
80
 
81
81
  def revise_letter_failed(letter)
82
- flash[:error] = t(".failed", model_name: "Letter")
82
+ flash.now[:error] = t(".failed", model_name: "Letter")
83
83
  render_form(letter, :edit)
84
84
  end
85
85
 
@@ -1,3 +1,6 @@
1
+ #
2
+ # E.g. medications/esa_prescriptions
3
+ #
1
4
  module Renalware
2
5
  module Medications
3
6
  module DrugTypes
@@ -0,0 +1,73 @@
1
+ require_dependency "renalware/messaging"
2
+
3
+ module Renalware
4
+ module Messaging
5
+ class MessagesController < BaseController
6
+ include Renalware::Concerns::Pageable
7
+ include PresenterHelper
8
+
9
+ def sent
10
+ messages = author.messages.page(page).per(per_page)
11
+ authorize messages
12
+ render locals: { messages: present(messages, Messaging::InternalMessagePresenter) }
13
+ end
14
+
15
+ def new
16
+ authorize Message, :new?
17
+ form = MessageFormBuilder.new(patient: patient, params: params).call
18
+ render_new(form)
19
+ end
20
+
21
+ def create
22
+ authorize Message, :create?
23
+ form = MessageForm.new(message_params)
24
+
25
+ if form.valid?
26
+ message = SendMessage.call(author: author, patient: patient, form: form)
27
+ flash.now[:notice] = "Message was successfully sent"
28
+ render_create(message)
29
+ else
30
+ render_new(form)
31
+ end
32
+ end
33
+
34
+ private
35
+
36
+ def message_we_are_replying_to(message)
37
+ return if message.replying_to_message_id.blank?
38
+ InternalMessagePresenter.new(message.replying_to_message)
39
+ end
40
+
41
+ def render_new(form)
42
+ render :new,
43
+ locals: {
44
+ form: form,
45
+ recipient_options: RecipientOptions.new(patient, current_user).to_a,
46
+ patient: patient
47
+ },
48
+ layout: false
49
+ end
50
+
51
+ def render_create(message)
52
+ render locals: {
53
+ message: InternalMessagePresenter.new(message),
54
+ original_message: message_we_are_replying_to(message)
55
+ }
56
+ end
57
+
58
+ def author
59
+ Messaging.cast_author(current_user)
60
+ end
61
+
62
+ def patient
63
+ Messaging.cast_patient(Patient.find(params[:patient_id]))
64
+ end
65
+
66
+ def message_params
67
+ params
68
+ .require(:messaging_message_form)
69
+ .permit(:subject, :body, :urgent, :replying_to_message_id, recipient_ids: [])
70
+ end
71
+ end
72
+ end
73
+ end