renalware-core 2.0.0.pre.beta12 → 2.0.0.pre.rc1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (217) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/app/assets/stylesheets/renalware/modules/_letters.scss +0 -1
  4. data/app/assets/stylesheets/renalware/modules/_pathology.scss +4 -0
  5. data/app/assets/stylesheets/renalware/partials/_beta_banner.scss +26 -0
  6. data/app/assets/stylesheets/renalware/partials/_errors.scss +4 -0
  7. data/app/controllers/renalware/admissions/consults_controller.rb +0 -7
  8. data/app/controllers/renalware/concerns/devise_controller_methods.rb +9 -9
  9. data/app/controllers/renalware/hd/mdm_controller.rb +2 -3
  10. data/app/controllers/renalware/hd/mdm_patients_controller.rb +7 -1
  11. data/app/controllers/renalware/letters/letters_controller.rb +1 -1
  12. data/app/controllers/renalware/letters/lists_controller.rb +13 -6
  13. data/app/controllers/renalware/mdm_controller.rb +1 -1
  14. data/app/controllers/renalware/mdm_patients_controller.rb +1 -1
  15. data/app/controllers/renalware/patients/bookmarks_controller.rb +1 -1
  16. data/app/controllers/renalware/patients/clinical_summaries_controller.rb +1 -1
  17. data/app/controllers/renalware/pd/mdm_controller.rb +2 -3
  18. data/app/controllers/renalware/pd/mdm_patients_controller.rb +2 -0
  19. data/app/controllers/renalware/renal/low_clearance/mdm_controller.rb +15 -0
  20. data/app/controllers/renalware/renal/low_clearance/mdm_patients_controller.rb +29 -0
  21. data/app/controllers/renalware/session_timeout_controller.rb +2 -0
  22. data/app/controllers/renalware/system/user_feedback_controller.rb +35 -0
  23. data/app/controllers/renalware/transplants/mdm_controller.rb +1 -3
  24. data/app/controllers/renalware/transplants/mdm_patients_controller.rb +2 -0
  25. data/app/helpers/renalware/application_helper.rb +1 -42
  26. data/app/helpers/renalware/clinic_helper.rb +3 -1
  27. data/app/helpers/renalware/infection_organisms_helper.rb +20 -0
  28. data/app/helpers/renalware/mdm_helper.rb +9 -7
  29. data/app/helpers/renalware/prescriptions_helper.rb +20 -0
  30. data/app/helpers/renalware/side_nav_helper.rb +0 -8
  31. data/app/jobs/application_job.rb +2 -0
  32. data/app/models/concerns/renalware/explicit_state_model.rb +2 -0
  33. data/app/models/concerns/renalware/patient_pathology_scopes.rb +39 -0
  34. data/app/models/concerns/renalware/personable.rb +3 -2
  35. data/app/models/renalware/clinics/appointment.rb +4 -4
  36. data/app/models/renalware/clinics/clinic_visit.rb +2 -2
  37. data/app/models/renalware/drugs/classification.rb +11 -0
  38. data/app/models/renalware/drugs/drug.rb +3 -3
  39. data/app/models/renalware/drugs/type.rb +2 -1
  40. data/app/models/renalware/hd/mdm_patients_query.rb +4 -9
  41. data/app/models/renalware/hd/session/closed.rb +10 -3
  42. data/app/models/renalware/hd/session.rb +2 -1
  43. data/app/models/renalware/hd/sessions/auditable_session_collection.rb +7 -7
  44. data/app/models/renalware/letters/archive.rb +1 -1
  45. data/app/models/renalware/letters/description.rb +1 -1
  46. data/app/models/renalware/letters/event/clinic_visit.rb +4 -0
  47. data/app/models/renalware/letters/letter_factory.rb +1 -0
  48. data/app/models/renalware/letters/part/allergies.rb +1 -1
  49. data/app/models/renalware/letters/part/prescriptions.rb +1 -1
  50. data/app/models/renalware/letters/part/problems.rb +1 -1
  51. data/app/models/renalware/letters/part/recent_pathology_results.rb +14 -12
  52. data/app/models/renalware/letters/part.rb +3 -2
  53. data/app/models/renalware/letters/recipient.rb +1 -1
  54. data/app/models/renalware/letters/signature.rb +3 -1
  55. data/app/models/renalware/pathology/current_observations_for_descriptions_query.rb +7 -4
  56. data/app/models/renalware/pathology/observations_for_descriptions_query.rb +1 -2
  57. data/app/models/renalware/patients/bookmark.rb +1 -1
  58. data/app/models/renalware/patients/patient_hospital_identifiers.rb +4 -4
  59. data/app/models/renalware/patients/practice.rb +3 -3
  60. data/app/models/renalware/patients/primary_care_physician.rb +2 -2
  61. data/app/models/renalware/renal/low_clearance/mdm_patients_query.rb +63 -0
  62. data/app/models/renalware/renal/low_clearance/modality_description.rb +13 -0
  63. data/app/models/renalware/renal/profile.rb +2 -0
  64. data/app/models/renalware/renal/registry/preflight_checks/deaths_query.rb +1 -1
  65. data/app/models/renalware/renal/version.rb +9 -0
  66. data/app/models/renalware/renal.rb +4 -0
  67. data/app/models/renalware/role.rb +4 -3
  68. data/app/models/renalware/roles_user.rb +6 -0
  69. data/app/models/renalware/system/user_feedback.rb +16 -0
  70. data/app/models/renalware/transplants/donor_modality_description.rb +3 -0
  71. data/app/models/renalware/transplants/recipient_modality_description.rb +3 -0
  72. data/app/models/renalware/user.rb +14 -9
  73. data/app/models/renalware.rb +2 -5
  74. data/app/policies/renalware/base_policy.rb +1 -1
  75. data/app/policies/renalware/system/user_feedback_policy.rb +8 -0
  76. data/app/presenters/renalware/hd/mdm_presenter.rb +2 -0
  77. data/app/presenters/renalware/hd/session_access_presenter.rb +1 -1
  78. data/app/presenters/renalware/hd/session_presenter.rb +4 -5
  79. data/app/presenters/renalware/hd/station_presenter.rb +1 -1
  80. data/app/presenters/renalware/letters/letter_presenter.rb +4 -2
  81. data/app/presenters/renalware/mdm_presenter.rb +3 -3
  82. data/app/presenters/renalware/pathology/observations_diff.rb +110 -0
  83. data/app/presenters/renalware/renal/clinical_summary_presenter.rb +32 -4
  84. data/app/presenters/renalware/renal/low_clearance/mdm_presenter.rb +14 -0
  85. data/app/views/renalware/accesses/assessments/show.html.slim +1 -1
  86. data/app/views/renalware/accesses/dashboards/show.html.slim +1 -1
  87. data/app/views/renalware/accesses/procedures/show.html.slim +1 -1
  88. data/app/views/renalware/accesses/profiles/_list.html.slim +1 -1
  89. data/app/views/renalware/accesses/profiles/show.html.slim +1 -1
  90. data/app/views/renalware/admissions/consults/_form.html.slim +12 -12
  91. data/app/views/renalware/admissions/requests/_create_request_link.html.slim +1 -1
  92. data/app/views/renalware/admissions/requests/_form.html.slim +1 -1
  93. data/app/views/renalware/clinical/allergies/_new.html.slim +3 -3
  94. data/app/views/renalware/clinical/allergy_statuses/_form.html.slim +3 -3
  95. data/app/views/renalware/clinical/dry_weights/{_row.html.slim → _dry_weight.html.slim} +0 -0
  96. data/app/views/renalware/clinical/dry_weights/_list.html.slim +1 -2
  97. data/app/views/renalware/clinical/dry_weights/index.html.slim +1 -2
  98. data/app/views/renalware/clinical/profiles/show.html.slim +1 -1
  99. data/app/views/renalware/events/types/index.html.slim +1 -1
  100. data/app/views/renalware/hd/diaries/show.pdf.slim +1 -0
  101. data/app/views/renalware/hd/diary_slots/_form.html.slim +10 -10
  102. data/app/views/renalware/hd/diary_slots/_tab.html.slim +4 -4
  103. data/app/views/renalware/hd/mdm/_sessions.html.slim +1 -1
  104. data/app/views/renalware/hd/mdm_patients/_table.html.slim +7 -8
  105. data/app/views/renalware/hd/ongoing_sessions/_table.html.slim +1 -2
  106. data/app/views/renalware/hd/sessions/_form.html.slim +2 -2
  107. data/app/views/renalware/hd/sessions/_list.html.slim +1 -1
  108. data/app/views/renalware/hd/sessions/_row.html.slim +1 -1
  109. data/app/views/renalware/hd/sessions/_session_nav.html.slim +1 -1
  110. data/app/views/renalware/hd/sessions/_table.html.slim +1 -1
  111. data/app/views/renalware/hd/sessions/closed/_row.html.slim +1 -1
  112. data/app/views/renalware/hd/sessions/open/_row.html.slim +1 -1
  113. data/app/views/renalware/hd/stations/edit.html.slim +1 -1
  114. data/app/views/renalware/hd/stations/index.html.slim +1 -1
  115. data/app/views/renalware/hd/stations/new.html.slim +1 -1
  116. data/app/views/renalware/layouts/_patient.html.slim +1 -1
  117. data/app/views/renalware/layouts/application.html.slim +3 -1
  118. data/app/views/renalware/letters/contacts/_new_person.html.slim +2 -2
  119. data/app/views/renalware/letters/contacts/_person_from_directory.html.slim +2 -2
  120. data/app/views/renalware/letters/formatted_letters/_letter.html.slim +3 -3
  121. data/app/views/renalware/letters/formatted_letters/show.html.slim +1 -1
  122. data/app/views/renalware/letters/formatted_letters/show.inlinepdf.slim +1 -1
  123. data/app/views/renalware/letters/formatted_letters/show.pdf.slim +1 -1
  124. data/app/views/renalware/letters/letters/_electronic_ccs.html.slim +1 -1
  125. data/app/views/renalware/letters/letters/_form.html.slim +5 -2
  126. data/app/views/renalware/letters/letters/_pathology.html.slim +26 -0
  127. data/app/views/renalware/letters/letters/_preview.html.slim +3 -3
  128. data/app/views/renalware/letters/letters/edit.html.slim +11 -12
  129. data/app/views/renalware/letters/letters/new.html.slim +1 -1
  130. data/app/views/renalware/letters/lists/_letter.html.slim +1 -2
  131. data/app/views/renalware/letters/lists/show.html.slim +13 -14
  132. data/app/views/renalware/letters/parts/_recent_pathology_results.html.slim +3 -8
  133. data/app/views/renalware/letters/shared/_electronic_cc_type_tabs.html.slim +3 -3
  134. data/app/views/renalware/mdm/_letters.html.slim +1 -1
  135. data/app/views/renalware/mdm/_measurements.html.slim +1 -1
  136. data/app/views/renalware/mdm_patients/_patient.html.slim +1 -1
  137. data/app/views/renalware/mdm_patients/_table.html.slim +11 -13
  138. data/app/views/renalware/messaging/internal/messages/_form.html.slim +7 -7
  139. data/app/views/renalware/messaging/internal/messages/_send_message_link.html.slim +1 -1
  140. data/app/views/renalware/messaging/internal/messages/_send_reply_link.html.slim +1 -1
  141. data/app/views/renalware/messaging/internal/receipts/_sent_receipt.html.slim +1 -1
  142. data/app/views/renalware/messaging/shared/_messages_type_tabs.html.slim +3 -3
  143. data/app/views/renalware/navigation/_branding.html.slim +1 -1
  144. data/app/views/renalware/navigation/_mdms.html.slim +1 -0
  145. data/app/views/renalware/pathology/observations/_diff.html.slim +22 -0
  146. data/app/views/renalware/patients/_layout.html.slim +1 -1
  147. data/app/views/renalware/patients/alerts/_create_alert_link.html.slim +1 -1
  148. data/app/views/renalware/patients/alerts/_form.html.slim +4 -4
  149. data/app/views/renalware/patients/alerts/_list.html.slim +1 -2
  150. data/app/views/renalware/patients/bookmarks/_delete.html.slim +1 -1
  151. data/app/views/renalware/patients/bookmarks/_new.html.slim +8 -8
  152. data/app/views/renalware/patients/clinical_summaries/_events.html.slim +6 -4
  153. data/app/views/renalware/patients/clinical_summaries/_letters.html.slim +6 -3
  154. data/app/views/renalware/patients/clinical_summaries/_prescriptions.html.slim +2 -2
  155. data/app/views/renalware/patients/clinical_summaries/_problems.html.slim +2 -2
  156. data/app/views/renalware/patients/clinical_summaries/show.html.slim +14 -4
  157. data/app/views/renalware/patients/patients/show.html.slim +1 -1
  158. data/app/views/renalware/patients/side_menu/_modalities.html.slim +2 -2
  159. data/app/views/renalware/patients/worries/_delete.html.slim +1 -1
  160. data/app/views/renalware/patients/worries/_new.html.slim +6 -6
  161. data/app/views/renalware/pd/dashboards/show.html.slim +1 -1
  162. data/app/views/renalware/pd/infection_organisms/_table.html.slim +3 -3
  163. data/app/views/renalware/pd/pet_adequacy_results/_form.html.slim +23 -23
  164. data/app/views/renalware/pd/regime_bags/_form.html.slim +5 -5
  165. data/app/views/renalware/pd/regime_bags/_regime_bag.html.slim +2 -2
  166. data/app/views/renalware/pd/regime_bags/_regime_bags.html.slim +1 -1
  167. data/app/views/renalware/pd/regimes/_current_regime.html.slim +1 -1
  168. data/app/views/renalware/problems/problems/index.html.slim +1 -1
  169. data/app/views/renalware/renal/low_clearance/mdm/_bottom.html.slim +3 -0
  170. data/app/views/renalware/renal/low_clearance/mdm/_low_clearance_profile.html.slim +4 -0
  171. data/app/views/renalware/renal/low_clearance/mdm/_top.html.slim +5 -0
  172. data/app/views/renalware/renal/low_clearance/mdm_patients/_filters.html.slim +9 -0
  173. data/app/views/renalware/renal/profiles/_mini.html.slim +1 -1
  174. data/app/views/renalware/reporting/audits/index.html.slim +1 -1
  175. data/app/views/renalware/research/study_participants/_form.html.slim +3 -3
  176. data/app/views/renalware/shared/_modal_close_link.html.slim +1 -1
  177. data/app/views/renalware/shared/documents/_blood_pressure_input.html.slim +1 -1
  178. data/app/views/renalware/snippets/snippets/_form.html.slim +4 -4
  179. data/app/views/renalware/snippets/snippets/_list.html.slim +3 -3
  180. data/app/views/renalware/snippets/snippets/_row.html.slim +2 -2
  181. data/app/views/renalware/snippets/snippets/_table.html.slim +7 -7
  182. data/app/views/renalware/snippets/snippets/edit.html.slim +1 -1
  183. data/app/views/renalware/snippets/snippets/new.html.slim +1 -1
  184. data/app/views/renalware/system/user_feedback/_banner.html.slim +9 -0
  185. data/app/views/renalware/system/user_feedback/new.html.slim +13 -0
  186. data/app/views/renalware/transplants/donor_dashboards/show.html.slim +2 -2
  187. data/app/views/renalware/transplants/recipient_dashboards/show.html.slim +2 -2
  188. data/config/initializers/inflections.rb +2 -0
  189. data/config/locales/custom.yml +7 -0
  190. data/config/locales/renalware/letters/letter.en.yml +2 -2
  191. data/config/locales/renalware/navigation/renal.en.yml +1 -0
  192. data/config/locales/renalware/renal/low_clearance.en.yml +15 -0
  193. data/config/permissions.yml +1 -0
  194. data/config/routes.rb +10 -0
  195. data/db/migrate/20171114120904_add_pathology_snapshot_to_letters.rb +5 -0
  196. data/db/migrate/20171123123712_add_id_to_roles_users.rb +5 -0
  197. data/db/migrate/20171123143534_add_pk_to_drug_types_drugs.rb +18 -0
  198. data/db/migrate/20171123154116_create_renal_versions.rb +14 -0
  199. data/db/migrate/20171128163543_add_more_missing_indexes.rb +16 -0
  200. data/db/migrate/20171206121652_add_loinc_code_to_observation_descriptions.rb +5 -0
  201. data/db/migrate/20171208211206_create_user_feedback.rb +10 -0
  202. data/db/migrate/20171211130716_remove_unused_patients_cols.rb +6 -0
  203. data/db/seeds/default/modalities/descriptions.rb +1 -0
  204. data/db/views/reporting_anaemia_audit_v01.sql +1 -1
  205. data/db/views/reporting_bone_audit_v01.sql +1 -1
  206. data/lib/renalware/configuration.rb +3 -0
  207. data/lib/renalware/version.rb +1 -1
  208. data/spec/factories/modalities/modality_descriptions.rb +3 -2
  209. data/spec/factories/renal/lcc_modality_description.rb +9 -0
  210. data/spec/factories/system/roles.rb +2 -2
  211. data/spec/factories/system/users.rb +3 -3
  212. data/spec/support/login_macros.rb +2 -2
  213. data/spec/support/roles_spec_helper.rb +1 -1
  214. metadata +35 -6
  215. data/app/models/renalware/patients/message_listener.rb +0 -31
  216. data/config/initializers/version.rb +0 -3
  217. data/spec/support/database_cleaner.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f78f8b04fdc0bc1abadea1b1dd957ef5914a4326
4
- data.tar.gz: e70a195bee170e116535ffc15520675353257afd
3
+ metadata.gz: 368a9f7e47981dd189746ea33f2f9170da40feea
4
+ data.tar.gz: 661e00b27713f1b17a461bfff57e9afda54ce746
5
5
  SHA512:
6
- metadata.gz: 33b16df842b119915bb7e86192af1ccc9073862e417d179869c1a31592b977f22064bfc0b705480c546ad4b4ef3a268498e45a7ba254e58e4c6e4c1877998f08
7
- data.tar.gz: 7f30681a3bbd4dab9e2f3a4dc0956e3990a117c2b4b85eb7ac7fdb3bfa67ed4d1142a19df46cf0a2e3b643983e3c83ccbedf9214327c911ef23634327580d132
6
+ metadata.gz: 343b0bab9e105e8413782e4c4bd310e6ae25982090e8bd1cfdde21e72b3c914b458914f6a42078a0fd5a5c5ad2064144fe3e0b8d66d49c517706e421da0e3830
7
+ data.tar.gz: 5745969d2babe47614fdcb95717fb837071c0dfce4b6f782c1d60a7418792efb3a380b7409c520a4fc2f3ceeaa249412eb7c08f6a29ddce065f6f3bb0d088be4
data/README.md CHANGED
@@ -29,7 +29,7 @@ for example `renalware-ukrdc` which enables sending data to the UKRDC.
29
29
 
30
30
  - Ruby 2.x
31
31
  - Ruby on Rails 5
32
- - Postgres 9.6+
32
+ - Postgres 10.1+
33
33
 
34
34
  ## Get up and running locally
35
35
 
@@ -1,4 +1,3 @@
1
-
2
1
  .electronic-ccs {
3
2
  ul.actions {
4
3
  list-style: none;
@@ -1,3 +1,7 @@
1
+ table.pathology-observation-diff {
2
+ width: auto;
3
+ }
4
+
1
5
  table#observations {
2
6
  border-collapse: collapse;
3
7
  white-space: nowrap;
@@ -0,0 +1,26 @@
1
+ .beta_banner {
2
+ background-color: $nhs-orange;
3
+ padding: 0.4rem 1rem;
4
+ color: $white;
5
+ text-align: center;
6
+
7
+ span {
8
+ font-size: 1.1rem;
9
+ }
10
+
11
+ .button {
12
+ margin: 0;
13
+ margin-left: 1rem;
14
+ padding: 0.3rem 0.8rem;
15
+ }
16
+ }
17
+
18
+ .new_feedback {
19
+ .radio {
20
+ label {
21
+ input {
22
+ margin: 0 1rem 0.5rem 0
23
+ }
24
+ }
25
+ }
26
+ }
@@ -1,3 +1,7 @@
1
+ .alert-box.warning {
2
+ background-color: $nhs-orange;
3
+ }
4
+
1
5
  .error-page {
2
6
  .title-area .name {
3
7
  color: $white;
@@ -52,13 +52,6 @@ module Renalware
52
52
 
53
53
  private
54
54
 
55
- def present(consults)
56
- CollectionPresenter.new(
57
- Consult.all.order(created_at: :desc).page(page).per(per_page),
58
- ConsultPresenter
59
- )
60
- end
61
-
62
55
  def find_and_authorize_consult
63
56
  Consult.find(params[:id]).tap do |consult|
64
57
  authorize consult
@@ -41,15 +41,15 @@ module Renalware
41
41
  devise_parameter_sanitizer.permit(
42
42
  :account_update,
43
43
  keys: [
44
- :given_name,
45
- :family_name,
46
- :username,
47
- :email,
48
- :password,
49
- :password_confirmation,
50
- :current_password,
51
- :professional_position,
52
- :signature
44
+ :given_name,
45
+ :family_name,
46
+ :username,
47
+ :email,
48
+ :password,
49
+ :password_confirmation,
50
+ :current_password,
51
+ :professional_position,
52
+ :signature
53
53
  ]
54
54
  )
55
55
  end
@@ -1,11 +1,10 @@
1
- require_dependency "renalware/hd/base_controller"
1
+ require_dependency "renalware/hd"
2
2
 
3
3
  module Renalware
4
4
  module HD
5
5
  class MDMController < Renalware::MDMController
6
- before_action :load_patient
7
-
8
6
  def show
7
+ authorize patient
9
8
  mdm_presenter = HD::MDMPresenter.new(patient: patient, view_context: view_context)
10
9
  render_show(mdm_presenter: mdm_presenter)
11
10
  end
@@ -1,3 +1,5 @@
1
+ require_dependency "renalware/hd"
2
+
1
3
  module Renalware
2
4
  module HD
3
5
  class MDMPatientsController < Renalware::MDMPatientsController
@@ -8,7 +10,11 @@ module Renalware
8
10
  end
9
11
 
10
12
  def index
11
- render_index(query: MDMPatientsQuery.new(q: params[:q]),
13
+ query = HD::MDMPatientsQuery.new(
14
+ relation: HD::Patient.eager_load(hd_profile: [:hospital_unit]),
15
+ q: params[:q]
16
+ )
17
+ render_index(query: query,
12
18
  page_title: t(".page_title"),
13
19
  view_proc: ->(patient) { patient_hd_mdm_path(patient) },
14
20
  patient_presenter_class: HD::PatientPresenter)
@@ -184,7 +184,7 @@ module Renalware
184
184
  [
185
185
  :event_type, :event_id, :clinical,
186
186
  :letterhead_id, :author_id, :description, :issued_on, :enclosures,
187
- :salutation, :body, :notes,
187
+ :salutation, :body, :notes, :pathology_timestamp,
188
188
  main_recipient_attributes: main_recipient_attributes,
189
189
  cc_recipients_attributes: cc_recipients_attributes,
190
190
  electronic_cc_recipient_ids: []
@@ -7,14 +7,21 @@ module Renalware
7
7
 
8
8
  def show
9
9
  query = LetterQuery.new(q: params[:q])
10
- collection = call_query(query).page(page).per(per_page)
11
- @letters = present_letters(collection)
12
- authorize @letters
10
+ letters = find_and_authorize_letters(query)
11
+
12
+ render locals: {
13
+ letters: letters,
14
+ authors: User.author.ordered,
15
+ typists: User.ordered,
16
+ q: query.search
17
+ }
18
+ end
13
19
 
14
- @q = query.search
20
+ private
15
21
 
16
- @authors = User.author.ordered
17
- @typists = User.ordered
22
+ def find_and_authorize_letters(query)
23
+ collection = call_query(query).page(page).per(per_page)
24
+ present_letters(collection).tap { |letters| authorize letters }
18
25
  end
19
26
 
20
27
  def present_letters(letters)
@@ -1,4 +1,4 @@
1
- require_dependency "renalware/hd/base_controller"
1
+ require_dependency "renalware"
2
2
 
3
3
  module Renalware
4
4
  class MDMController < BaseController
@@ -1,4 +1,4 @@
1
- require_dependency "renalware/base_controller"
1
+ require_dependency "renalware"
2
2
 
3
3
  # Note we rely on template inheritance with this MDM Base class i.e. subclasses (e.g.
4
4
  # HD::MDMPatientsController) can override templates and partials (e.g. add a _filters partial
@@ -22,7 +22,7 @@ module Renalware
22
22
  else
23
23
  skip_authorization
24
24
  end
25
- fallback_location = patient.present? ? patient : root_path
25
+ fallback_location = patient.presence || root_path
26
26
  redirect_back(fallback_location: patient_path(fallback_location),
27
27
  notice: success_msg_for("bookmark"))
28
28
  end
@@ -8,7 +8,7 @@ module Renalware
8
8
 
9
9
  def show
10
10
  clinical_summary = Renal::ClinicalSummaryPresenter.new(patient)
11
- render :show, locals: { clinical_summary: clinical_summary }
11
+ render :show, locals: { clinical_summary: clinical_summary, patient: patient }
12
12
  end
13
13
  end
14
14
  end
@@ -1,11 +1,10 @@
1
- require_dependency "renalware/hd/base_controller"
1
+ require_dependency "renalware/pd"
2
2
 
3
3
  module Renalware
4
4
  module PD
5
5
  class MDMController < Renalware::MDMController
6
- before_action :load_patient
7
-
8
6
  def show
7
+ authorize patient
9
8
  mdm_presenter = PD::MDMPresenter.new(patient: patient, view_context: view_context)
10
9
  render_show(mdm_presenter: mdm_presenter)
11
10
  end
@@ -1,3 +1,5 @@
1
+ require "renalware/pd"
2
+
1
3
  module Renalware
2
4
  module PD
3
5
  class MDMPatientsController < Renalware::MDMPatientsController
@@ -0,0 +1,15 @@
1
+ require_dependency "renalware/renal"
2
+
3
+ module Renalware
4
+ module Renal
5
+ module LowClearance
6
+ class MDMController < Renalware::MDMController
7
+ def show
8
+ authorize patient
9
+ presenter = LowClearance::MDMPresenter.new(patient: patient, view_context: view_context)
10
+ render_show(mdm_presenter: presenter)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,29 @@
1
+ require_dependency "renalware/renal"
2
+
3
+ module Renalware
4
+ module Renal
5
+ module LowClearance
6
+ class MDMPatientsController < Renalware::MDMPatientsController
7
+ def index
8
+ render_index(query: query,
9
+ page_title: t(".page_title"),
10
+ view_proc: ->(patient) { patient_renal_low_clearance_mdm_path(patient) })
11
+ end
12
+
13
+ private
14
+
15
+ def query
16
+ LowClearance::MDMPatientsQuery.new(query: q, named_filter: named_filter)
17
+ end
18
+
19
+ def named_filter
20
+ params[:named_filter]
21
+ end
22
+
23
+ def q
24
+ params[:q]
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
@@ -17,6 +17,7 @@ module Renalware
17
17
  # We could return the amount of time remaining before the session expires like so
18
18
  # time_left = Devise.timeout_in - (Time.now - user_session["last_request_at"]).round
19
19
  # and display this to the user if required.
20
+ # rubocop :disable Naming/PredicateName
20
21
  def has_user_timed_out
21
22
  skip_authorization
22
23
  if referrer_is_a_devise_url? || !current_users_session_has_timed_out?
@@ -26,6 +27,7 @@ module Renalware
26
27
  head :unauthorized
27
28
  end
28
29
  end
30
+ # rubocop :enable Naming/PredicateName
29
31
 
30
32
  # A user could invoke this action to keep their session alive, by for example
31
33
  # clicking on a "Keep my session active" button which makes an ajax call to this action.
@@ -0,0 +1,35 @@
1
+ module Renalware
2
+ module System
3
+ class UserFeedbackController < BaseController
4
+ def new
5
+ feedback = UserFeedback.new
6
+ authorize feedback
7
+ render_new(feedback)
8
+ end
9
+
10
+ def create
11
+ feedback = UserFeedback.new(user_feedback_params)
12
+ feedback.author = current_user
13
+ authorize feedback
14
+
15
+ if feedback.save
16
+ redirect_to root_url, notice: "Feedback registered, thank you"
17
+ else
18
+ render_new(feedback)
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def render_new(feedback)
25
+ render :new, locals: { feedback: feedback }
26
+ end
27
+
28
+ def user_feedback_params
29
+ params
30
+ .require(:feedback)
31
+ .permit(:comment, :category)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -1,12 +1,10 @@
1
- require_dependency "renalware/hd/base_controller"
2
1
  require_dependency "renalware/transplants"
3
2
 
4
3
  module Renalware
5
4
  module Transplants
6
5
  class MDMController < Renalware::MDMController
7
- before_action :load_patient
8
-
9
6
  def show
7
+ authorize patient
10
8
  mdm_presenter = Transplants::MDMPresenter.new(patient: patient, view_context: view_context)
11
9
  render_show(mdm_presenter: mdm_presenter)
12
10
  end
@@ -1,3 +1,5 @@
1
+ require_dependency "renalware/transplants"
2
+
1
3
  module Renalware
2
4
  module Transplants
3
5
  class MDMPatientsController < Renalware::MDMPatientsController
@@ -65,7 +65,7 @@ module Renalware
65
65
  end
66
66
 
67
67
  def default_for_blank(val, msg)
68
- val.blank? ? msg : val
68
+ val.presence || msg
69
69
  end
70
70
 
71
71
  def default_for_blank_date(date, msg)
@@ -76,46 +76,6 @@ module Renalware
76
76
  val.blank? ? msg : "#{val} #{unit}"
77
77
  end
78
78
 
79
- def medication_and_route(med_route)
80
- if med_route.blank?
81
- "No medication prescribed"
82
- else
83
- other_route = "Route: Other (Please specify in notes)"
84
- safe_join(
85
- med_route.map do |m|
86
- route = if m.medication_route.name == other_route
87
- m.medication_route.full_name
88
- else
89
- m.medication_route.name
90
- end
91
- "<li>
92
- #{m.drug.name} - #{route}
93
- </li>".html_safe
94
- end
95
- )
96
- end
97
- end
98
-
99
- def organisms_and_sensitivities(infection_organisms)
100
- if infection_organisms.blank?
101
- "Unknown"
102
- else
103
- safe_join(
104
- infection_organisms.map do |io|
105
- "<li>#{io.organism_code.name} - #{io.sensitivity}</li>".html_safe
106
- end
107
- )
108
- end
109
- end
110
-
111
- def organisms(infection_organisms)
112
- if infection_organisms.blank?
113
- "Unknown"
114
- else
115
- safe_join(infection_organisms.map { |io| "<li>#{io.organism_code.name}</li>".html_safe })
116
- end
117
- end
118
-
119
79
  def pipe_separator
120
80
  "&nbsp;|&nbsp;".html_safe
121
81
  end
@@ -130,7 +90,6 @@ module Renalware
130
90
  end
131
91
 
132
92
  def inline_image(file_path)
133
- # InlineImage.new("/app/assets/images/#{file_path}")
134
93
  InlineImage.new(asset_path(file_path))
135
94
  end
136
95
 
@@ -7,7 +7,9 @@ module Renalware
7
7
  else
8
8
  link_to("Draft Letter", new_patient_letters_letter_path(
9
9
  patient,
10
- event_type: Renalware::Clinics::ClinicVisit.name.to_s, event_id: clinic_visit.id
10
+ event_type: Renalware::Clinics::ClinicVisit.name.to_s,
11
+ event_id: clinic_visit.id,
12
+ clinical: true
11
13
  ))
12
14
  end
13
15
  end
@@ -7,5 +7,25 @@ module Renalware
7
7
  def new_pd_infection_organism_path(infectable)
8
8
  super(infectable_type: infectable.class.to_s, infectable_id: infectable.id)
9
9
  end
10
+
11
+ def organisms_and_sensitivities(infection_organisms)
12
+ if infection_organisms.blank?
13
+ "Unknown"
14
+ else
15
+ safe_join(
16
+ infection_organisms.map do |io|
17
+ "<li>#{io.organism_code.name} - #{io.sensitivity}</li>".html_safe
18
+ end
19
+ )
20
+ end
21
+ end
22
+
23
+ def organisms(infection_organisms)
24
+ if infection_organisms.blank?
25
+ "Unknown"
26
+ else
27
+ safe_join(infection_organisms.map { |io| "<li>#{io.organism_code.name}</li>".html_safe })
28
+ end
29
+ end
10
30
  end
11
31
  end
@@ -17,11 +17,12 @@ module Renalware
17
17
 
18
18
  def path
19
19
  @path ||= begin
20
- case modality_description_name&.downcase&.to_sym
20
+ return if modality_description.type.blank?
21
+ case modality_description_symbol
21
22
  when :pd then patient_pd_mdm_path(patient)
22
23
  when :hd then patient_hd_mdm_path(patient)
23
24
  when :transplant then patient_transplants_mdm_path(patient)
24
- when :lcc then nil # patient_low_clearance_mdm_path(patient)
25
+ when :low_clearance then patient_renal_low_clearance_mdm_path(patient)
25
26
  end
26
27
  end
27
28
  end
@@ -32,11 +33,8 @@ module Renalware
32
33
 
33
34
  private
34
35
 
35
- attr_reader :patient, :modality_description_name
36
-
37
- def modality_description_name
38
- modality_description.name
39
- end
36
+ attr_reader :patient
37
+ delegate :name, to: :modality_description, prefix: true, allow_nil: true
40
38
 
41
39
  def modality_description
42
40
  current_modality = patient.current_modality || NullObject.instance
@@ -46,6 +44,10 @@ module Renalware
46
44
  def mdm_name
47
45
  "#{modality_description_name} MDM"
48
46
  end
47
+
48
+ def modality_description_symbol
49
+ modality_description.becomes(modality_description.type.constantize).to_sym
50
+ end
49
51
  end
50
52
  end
51
53
  end
@@ -35,5 +35,25 @@ module Renalware
35
35
  def default_provider(provider)
36
36
  provider == "gp" ? "checked" : nil
37
37
  end
38
+
39
+ def medication_and_route(med_route)
40
+ if med_route.blank?
41
+ "No medication prescribed"
42
+ else
43
+ other_route = "Route: Other (Please specify in notes)"
44
+ safe_join(
45
+ med_route.map do |m|
46
+ route = if m.medication_route.name == other_route
47
+ m.medication_route.full_name
48
+ else
49
+ m.medication_route.name
50
+ end
51
+ "<li>
52
+ #{m.drug.name} - #{route}
53
+ </li>".html_safe
54
+ end
55
+ )
56
+ end
57
+ end
38
58
  end
39
59
  end
@@ -2,14 +2,6 @@ require_dependency "renalware/patients"
2
2
 
3
3
  module Renalware
4
4
  module SideNavHelper
5
- def display_pd_menu?(patient)
6
- true
7
- end
8
-
9
- def display_hd_menu?(patient)
10
- true
11
- end
12
-
13
5
  def find_user_bookmark_for_patient(patient)
14
6
  user = Renalware::Patients.cast_user(current_user)
15
7
  user.bookmark_for_patient(patient)
@@ -1,2 +1,4 @@
1
1
  class ApplicationJob < ActiveJob::Base
2
+ # :nocov:
3
+ # :nocov:
2
4
  end
@@ -51,6 +51,7 @@ module Renalware
51
51
  module ClassMethods
52
52
  # Adds a ActiveRecord scopes for each state defined; e.g. `Letter.draft`
53
53
  #
54
+ # rubocop :disable Naming/PredicateName
54
55
  def has_states(*states)
55
56
  states.each do |state|
56
57
  state_scope(state, state)
@@ -64,6 +65,7 @@ module Renalware
64
65
  states
65
66
  end
66
67
  end
68
+ # rubocop :enable Naming/PredicateName
67
69
 
68
70
  # Allows for custom scope names, example:
69
71
  #
@@ -0,0 +1,39 @@
1
+ require_dependency "renalware"
2
+
3
+ # Mix this module into a Patient Query object for example in order to include the patient's
4
+ # current key pathology and enable sorting on pathology date and value fields using
5
+ # ransack's sort_link helper in the view.
6
+ #
7
+ module Renalware
8
+ module PatientPathologyScopes
9
+ def with_current_key_pathology
10
+ includes(:current_key_observation_set).joins(:current_key_observation_set)
11
+ end
12
+
13
+ # Define some ransackers to make it easier to sort the table (using sort_link)
14
+ # on pathology dates and values. Note it wasn't possible just to use say
15
+ # = sort_link(.., "pathology_current_key_observation_sets.cre_observed_at", ..)
16
+ # or
17
+ # = sort_link(.., :pathology_current_key_observation_set_cre_observed_at", ..)
18
+ # as ransack wasn't happy and discarded the sort predicate.
19
+ # So here we mix in useful ransackers as short cut to use in sort_link
20
+ #
21
+ # Example usage:
22
+ # = sort_link(<url>, :cre_observed_at, "CRE date")
23
+ #
24
+ def self.extended(base)
25
+ %i(hgb ure cre).each do |code|
26
+ base.ransacker(code) { pathology_sort_predicate("#{code}_result") }
27
+ base.ransacker(:"#{code}_date") { pathology_sort_predicate("#{code}_observed_at") }
28
+ end
29
+
30
+ %i(mdrd).each do |code|
31
+ base.ransacker(code) { pathology_sort_predicate("#{code}_result") }
32
+ end
33
+ end
34
+
35
+ def self.pathology_sort_predicate(column)
36
+ Arel.sql("pathology_current_key_observation_sets.#{column}")
37
+ end
38
+ end
39
+ end
@@ -4,7 +4,8 @@ module Renalware
4
4
 
5
5
  included do
6
6
  class_eval do
7
- validates_presence_of :given_name, :family_name
7
+ validates :given_name, presence: true
8
+ validates :family_name, presence: true
8
9
  end
9
10
 
10
11
  def full_name
@@ -22,7 +23,7 @@ module Renalware
22
23
 
23
24
  def salutation
24
25
  parts = [Renalware.config.salutation_prefix]
25
- parts << (title.present? ? title : given_name)
26
+ parts << (title.presence || given_name)
26
27
  parts << family_name
27
28
  parts.compact.join(" ")
28
29
  end
@@ -7,10 +7,10 @@ module Renalware
7
7
  belongs_to :clinic
8
8
  belongs_to :user
9
9
 
10
- validates_presence_of :starts_at
11
- validates_presence_of :patient
12
- validates_presence_of :clinic
13
- validates_presence_of :user
10
+ validates :starts_at, presence: true
11
+ validates :patient, presence: true
12
+ validates :clinic, presence: true
13
+ validates :user, presence: true
14
14
 
15
15
  validates :starts_at, timeliness: { type: :datetime }
16
16
 
@@ -15,8 +15,8 @@ module Renalware
15
15
  belongs_to :clinic
16
16
  has_many :clinic_letters
17
17
 
18
- validates_presence_of :date
19
- validates_presence_of :clinic
18
+ validates :date, presence: true
19
+ validates :clinic, presence: true
20
20
 
21
21
  validates :date, timeliness: { type: :date }
22
22
  validates :time, timeliness: { type: :time, allow_blank: true }