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

Sign up to get free protection for your applications and to get access to all the features.
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 }