renalware-core 2.0.64 → 2.0.67

Sign up to get free protection for your applications and to get access to all the features.
Files changed (216) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/renalware/application.js.erb +2 -2
  3. data/app/controllers/renalware/admin/users_controller.rb +1 -1
  4. data/app/controllers/renalware/api/ukrdc/patients_controller.rb +14 -67
  5. data/app/controllers/renalware/drugs/drugs_controller.rb +1 -1
  6. data/app/controllers/renalware/hd/protocols_controller.rb +1 -1
  7. data/app/controllers/renalware/patients/bookmarks_controller.rb +16 -5
  8. data/app/controllers/renalware/snippets/snippets_controller.rb +1 -1
  9. data/app/controllers/renalware/system/user_feedback_controller.rb +1 -1
  10. data/app/documents/renalware/hd/session_document.rb +1 -0
  11. data/app/models/renalware/admissions/consult_query.rb +1 -1
  12. data/app/models/renalware/clinical/dry_weight.rb +4 -0
  13. data/app/models/renalware/clinical/patient.rb +5 -0
  14. data/app/models/renalware/clinical/patient_dry_weights_query.rb +1 -1
  15. data/app/models/renalware/directory/person_query.rb +1 -1
  16. data/app/models/renalware/hd/mdm_patients_query.rb +1 -1
  17. data/app/models/renalware/hd/patient.rb +6 -0
  18. data/app/models/renalware/hd/patient_listener.rb +8 -0
  19. data/app/models/renalware/hd/sessions/ongoing_query.rb +1 -1
  20. data/app/models/renalware/hd/sessions/patient_query.rb +1 -1
  21. data/app/models/renalware/letters/descriptions/search_query.rb +1 -1
  22. data/app/models/renalware/letters/letter_factory.rb +55 -2
  23. data/app/models/renalware/letters/letter_query.rb +1 -1
  24. data/app/models/renalware/letters/recipient.rb +11 -0
  25. data/app/models/renalware/letters/resolve_default_electronic_ccs.rb +47 -0
  26. data/app/models/renalware/low_clearance/mdm_patients_query.rb +1 -1
  27. data/app/models/renalware/medications/prescriptions_by_drug_type_query.rb +1 -1
  28. data/app/models/renalware/medications/prescriptions_query.rb +1 -1
  29. data/app/models/renalware/patients/bookmarks_query.rb +49 -0
  30. data/app/models/renalware/patients/patient_search.rb +1 -1
  31. data/app/models/renalware/pd/mdm_patients_query.rb +1 -1
  32. data/app/models/renalware/renal/prd_descriptions/search_query.rb +1 -1
  33. data/app/models/renalware/transplants/live_donors_query.rb +1 -1
  34. data/app/models/renalware/transplants/mdm_patients_query.rb +1 -1
  35. data/app/models/renalware/transplants/registrations/wait_list_query.rb +1 -1
  36. data/app/models/renalware/ukrdc/create_encrypted_patient_xml_files.rb +13 -11
  37. data/app/models/renalware/ukrdc/create_patient_xml_file.rb +33 -21
  38. data/app/models/renalware/ukrdc/transmission_log.rb +1 -1
  39. data/app/models/renalware/ukrdc/xml_renderer.rb +126 -0
  40. data/app/presenters/renalware/clinical/dry_weight_presenter.rb +4 -0
  41. data/app/presenters/renalware/clinical/dry_weights_presenter.rb +15 -9
  42. data/app/presenters/renalware/ukrdc/modality_presenter.rb +8 -0
  43. data/app/presenters/renalware/ukrdc/patient_presenter.rb +9 -6
  44. data/app/views/renalware/api/ukrdc/patients/_clinical_relationships.xml.builder +4 -4
  45. data/app/views/renalware/api/ukrdc/patients/_encounters.xml.builder +9 -9
  46. data/app/views/renalware/api/ukrdc/patients/_family_histories.xml.builder +4 -4
  47. data/app/views/renalware/api/ukrdc/patients/_patient.xml.builder +1 -20
  48. data/app/views/renalware/api/ukrdc/patients/_program_memberships.xml.builder +4 -4
  49. data/app/views/renalware/api/ukrdc/patients/_surveys.xml.builder +4 -4
  50. data/app/views/renalware/api/ukrdc/patients/encounters/_hd_session.xml.builder +31 -31
  51. data/app/views/renalware/api/ukrdc/patients/encounters/_treatment.xml.builder +34 -0
  52. data/app/views/renalware/api/ukrdc/patients/lab_orders/_lab_order.xml.builder +1 -1
  53. data/app/views/renalware/api/ukrdc/patients/show.xml.builder +1 -1
  54. data/app/views/renalware/hd/mdm/_summary.html.slim +12 -4
  55. data/app/views/renalware/hd/protocols/_recent_pathology.html.slim +4 -0
  56. data/app/views/renalware/hd/sessions/_form.html.slim +1 -0
  57. data/app/views/renalware/mdm/_prescription_buttons.html.slim +15 -0
  58. data/app/views/renalware/mdm/_prescriptions.html.slim +1 -8
  59. data/app/views/renalware/patients/bookmarks/_bookmark.html.slim +16 -0
  60. data/app/views/renalware/patients/bookmarks/_table.html.slim +20 -0
  61. data/app/views/renalware/patients/bookmarks/index.html.slim +3 -1
  62. data/app/views/renalware/transplants/mdm/_prescriptions.html.slim +1 -8
  63. data/config/initializers/core_extensions.rb +1 -1
  64. data/config/initializers/renalware.rb +3 -0
  65. data/config/locales/renalware/hd/session.en.yml +7 -0
  66. data/config/locales/renalware/patients/bookmarks.en.yml +12 -0
  67. data/config/locales/renalware/patients/side_menu.en.yml +1 -1
  68. data/db/migrate/20150119160039_create_versions.rb +3 -3
  69. data/db/migrate/20150120155952_create_problem_versions.rb +3 -3
  70. data/db/migrate/20150203161438_create_medication_prescription_versions.rb +3 -3
  71. data/db/migrate/20150515155052_users_have_and_belong_to_many_roles.rb +3 -1
  72. data/db/migrate/20160120203747_create_access_versions.rb +3 -3
  73. data/db/migrate/20160121175711_create_hd_versions.rb +3 -3
  74. data/db/migrate/20170217141529_create_clinic_versions.rb +3 -3
  75. data/db/migrate/20170217161409_create_patient_versions.rb +3 -3
  76. data/db/migrate/20170605102519_create_clinical_versions.rb +3 -3
  77. data/db/migrate/20171002175804_add_rr_columns_to_transplant_registration_status_descriptions.rb +9 -7
  78. data/db/migrate/20171003093347_create_hospital_wards.rb +14 -12
  79. data/db/migrate/20171003111228_create_aki_alert_actions.rb +6 -4
  80. data/db/migrate/20171003122425_create_renal_aki_alerts.rb +18 -16
  81. data/db/migrate/20171004092235_create_hd_dialysates.rb +9 -7
  82. data/db/migrate/20171004110909_add_dialysate_id_to_profile_and_session.rb +6 -4
  83. data/db/migrate/20171005081224_create_reporting_bone_audit.rb +3 -1
  84. data/db/migrate/20171005091202_reporting_audit_changes.rb +5 -3
  85. data/db/migrate/20171005130109_create_medication_current_prescriptions.rb +3 -1
  86. data/db/migrate/20171005144505_create_reporting_anaemia_audit.rb +3 -1
  87. data/db/migrate/20171009104106_add_legacy_patient_id_to_patients.rb +4 -2
  88. data/db/migrate/20171009181615_add_columns_to_drug_drugs.rb +6 -4
  89. data/db/migrate/20171012110133_create_research_studies.rb +19 -17
  90. data/db/migrate/20171012143050_create_research_study_participants.rb +27 -25
  91. data/db/migrate/20171013145849_set_patients_secure_id.rb +12 -10
  92. data/db/migrate/20171016152223_add_index_to_diary_slots.rb +14 -12
  93. data/db/migrate/20171017132738_add_unique_indexes_to_local_patient_ids.rb +11 -9
  94. data/db/migrate/20171017171625_update_hd_overall_audit_view.rb +7 -5
  95. data/db/migrate/20171101121130_create_function_to_render_audit_view_as_json.rb +6 -4
  96. data/db/migrate/20171101162244_create_consults.rb +21 -19
  97. data/db/migrate/20171106100216_create_pd_audit_view.rb +3 -1
  98. data/db/migrate/20171109084751_remove_local_patient_id_unique_idx.rb +11 -9
  99. data/db/migrate/20171113120217_add_uuid_to_hd_sessions.rb +4 -2
  100. data/db/migrate/20171114120904_add_pathology_snapshot_to_letters.rb +3 -1
  101. data/db/migrate/20171118160030_add_tags_to_patient_bookmarks.rb +3 -1
  102. data/db/migrate/20171123123712_add_id_to_roles_users.rb +3 -1
  103. data/db/migrate/20171123143534_add_pk_to_drug_types_drugs.rb +13 -12
  104. data/db/migrate/20171123154116_create_renal_versions.rb +11 -9
  105. data/db/migrate/20171127082158_add_region_to_addresses.rb +3 -1
  106. data/db/migrate/20171127092158_create_function_to_import_practices.rb +6 -2
  107. data/db/migrate/20171127092359_create_fn_to_insert_gps.rb +6 -2
  108. data/db/migrate/20171128163543_add_more_missing_indexes.rb +14 -12
  109. data/db/migrate/20171204112150_create_consult_sites.rb +13 -9
  110. data/db/migrate/20171206121652_add_loinc_code_to_observation_descriptions.rb +3 -1
  111. data/db/migrate/20171206140738_create_fn_to_load_practice_memberships_csv.rb +9 -5
  112. data/db/migrate/20171208211206_create_user_feedback.rb +7 -5
  113. data/db/migrate/20171211130716_remove_unused_patients_cols.rb +4 -2
  114. data/db/migrate/20171211131918_remove_email_from_primary_care_physicians.rb +5 -3
  115. data/db/migrate/20171211161400_create_pathology_current_table.rb +9 -7
  116. data/db/migrate/20171213111513_create_fn_to_refresh_current_obs.rb +6 -2
  117. data/db/migrate/20171214141335_create_trigger_to_update_current_observation_sets.rb +10 -6
  118. data/db/migrate/20171214190849_enforce_request_id_on_observations.rb +3 -1
  119. data/db/migrate/20171215122454_add_pathology_observation_set_to_letters.rb +8 -6
  120. data/db/migrate/20171219154529_create_admission_admissions.rb +25 -23
  121. data/db/migrate/20180102155055_update_patient_summaries_to_version_5.rb +3 -1
  122. data/db/migrate/20180105132358_add_emailed_at_to_letter_recipients.rb +4 -2
  123. data/db/migrate/20180108185400_remove_null_constraint_from_letters_pathology_snapshot.rb +3 -1
  124. data/db/migrate/20180112151706_create_low_clearance_profiles.rb +43 -41
  125. data/db/migrate/20180112151813_create_low_clearance_versions.rb +11 -9
  126. data/db/migrate/20180119121243_create_trigger_to_preprocess_hl7_msg.rb +10 -6
  127. data/db/migrate/20180121115246_add_include_pathology_in_letter_to_letters_letterheads.rb +3 -1
  128. data/db/migrate/20180122173922_create_virology_profiles.rb +5 -1
  129. data/db/migrate/20180125201356_make_obs_set_trigger_change_updated_at.rb +6 -2
  130. data/db/migrate/20180126142314_add_uuid_to_letters.rb +4 -2
  131. data/db/migrate/20180130165803_add_deleted_at_indexes.rb +14 -12
  132. data/db/migrate/20180201090444_add_created_at_to_delayed_jobs_in_hl7_trig_fn.rb +6 -2
  133. data/db/migrate/20180202184954_create_view_pathology_observation_digests.rb +3 -1
  134. data/db/migrate/20180206225525_update_fn_update_current_observation_set_from_trigger.rb +6 -2
  135. data/db/migrate/20180207082540_create_count_estimate_function.rb +6 -2
  136. data/db/migrate/20180208150629_add_authentication_token_to_users.rb +3 -1
  137. data/db/migrate/20180213124203_add_cancelled_to_pathology_observations.rb +7 -5
  138. data/db/migrate/20180213125734_update_fn_update_current_obs_set_trgger.rb +6 -2
  139. data/db/migrate/20180213171805_add_display_order_cols_to_observation_descriptions.rb +10 -8
  140. data/db/migrate/20180214124317_add_cols_to_aki_alerts.rb +7 -5
  141. data/db/migrate/20180216132741_disable_some_audits.rb +6 -4
  142. data/db/migrate/20180221210458_add_state_index_on_modalities.rb +3 -1
  143. data/db/migrate/20180222090501_add_partial_index_to_bookmarks.rb +4 -2
  144. data/db/migrate/20180223100420_add_sent_to_ukrdc_at_to_patients.rb +3 -1
  145. data/db/migrate/20180226124724_add_patient_id_to_virology_profile.rb +9 -5
  146. data/db/migrate/20180226132410_create_ukrdc_transmission_logs.rb +12 -10
  147. data/db/migrate/20180301095040_update_fn_to_upsert_gp_practive_memberships.rb +7 -3
  148. data/db/migrate/20180305134959_add_display_group_to_observation_desriptions.rb +23 -22
  149. data/db/migrate/20180306071308_remove_rogue_aki_alerts_column.rb +3 -1
  150. data/db/migrate/20180306080518_add_state_tracking_cols_to_letters.rb +17 -15
  151. data/db/migrate/20180307191650_add_dwell_time_to_pd_regime.rb +3 -1
  152. data/db/migrate/20180307223111_create_system_visits_and_events.rb +42 -39
  153. data/db/migrate/20180309140316_add_unique_constraint_to_obr_requestor.rb +3 -1
  154. data/db/migrate/20180311104609_remove_unique_obr_requestor_order_number_index.rb +4 -2
  155. data/db/migrate/20180313114927_remove_deleted_at_from_admission_consults.rb +3 -1
  156. data/db/migrate/20180313124819_remove_tx_operation_constraints.rb +7 -5
  157. data/db/migrate/20180319191942_create_function_to_sort_without_failing_on_nonnumerics.rb +6 -2
  158. data/db/migrate/20180323150241_update_path_obs_descs_for_letter_groupings.rb +25 -23
  159. data/db/migrate/20180326155400_add_admin_notes_to_system_user_feedback.rb +4 -2
  160. data/db/migrate/20180327100423_add_constraints_to_recipient_operations.rb +3 -1
  161. data/db/migrate/20180328210434_add_rrt_to_admission_consults.rb +3 -1
  162. data/db/migrate/20180419141524_add_cols_to_hd_patient_statistics.rb +8 -6
  163. data/db/migrate/20180422090043_update_hd_overall_audit_to_version_6.rb +85 -84
  164. data/db/migrate/20180427133558_add_code_to_hospitals_wards.rb +3 -1
  165. data/db/migrate/20180502093256_add_document_to_virology_profiles.rb +22 -21
  166. data/db/migrate/20180502110638_create_virology_versions.rb +7 -5
  167. data/db/migrate/20180510151959_update_hd_overall_audit_to_version_7.rb +8 -4
  168. data/db/migrate/20180511100345_add_notes_to_transplant_registration_statuses.rb +3 -1
  169. data/db/migrate/20180511140415_add_message_hash_messaging_messages.rb +4 -2
  170. data/db/migrate/20180511171835_create_unique_indexes_on_obr_obr_codes.rb +5 -3
  171. data/db/migrate/20180514151627_create_system_messages.rb +10 -8
  172. data/db/migrate/20180516111411_create_view_patient_current_modalities.rb +3 -1
  173. data/db/migrate/20180524072633_add_columns_to_dialysates.rb +10 -8
  174. data/db/migrate/20180524074320_add_columns_to_hd_dialysers.rb +8 -6
  175. data/db/migrate/20180605114332_create_pseudo_encrypt_function.rb +6 -2
  176. data/db/migrate/20180605141806_add_external_id_to_research_study_participants.rb +33 -31
  177. data/db/migrate/20180605175211_add_application_url_to_research_studies.rb +3 -1
  178. data/db/migrate/20180622130552_add_external_id_to_hd_sessions.rb +4 -2
  179. data/db/migrate/20180625124431_add_patient_identifier_to_feed_messages.rb +3 -1
  180. data/db/migrate/20180628132323_add_letter_date_indexes.rb +9 -7
  181. data/db/migrate/20180702091222_create_hd_providers.rb +5 -3
  182. data/db/migrate/20180702091237_create_hd_provider_units.rb +8 -6
  183. data/db/migrate/20180702091352_create_hd_transmission_log.rb +15 -13
  184. data/db/migrate/20180712143314_add_hidden_to_modality_descriptions.rb +3 -1
  185. data/db/migrate/20180718172750_update_audit_letters_authors_to_version_3.rb +13 -11
  186. data/db/migrate/20180725132557_add_days_text_to_hd_schedule_definitions.rb +21 -19
  187. data/db/migrate/20180725132808_create_hd_schedule_definition_filters_view.rb +3 -1
  188. data/db/migrate/20180730154454_add_external_session_id_to_hd_transmission_logs.rb +7 -5
  189. data/db/migrate/20180802103013_add_hd_mdm_missing_indexes.rb +6 -4
  190. data/db/migrate/20180802132417_add_missing_indexes_2.rb +16 -14
  191. data/db/migrate/20180802144507_add_missing_foreign_key_indexes.rb +14 -12
  192. data/db/migrate/20180803131157_add_uuid_to_hd_transmission_logs.rb +7 -1
  193. data/db/migrate/20180814103916_create_index_on_lower_patient_family_name.rb +5 -3
  194. data/db/migrate/20180815144429_update_hd_overall_audit_to_version_8.rb +8 -4
  195. data/db/migrate/20180831134926_create_daily_reports.rb +3 -6
  196. data/db/migrate/20180907100545_add_page_count_to_letters.rb +3 -1
  197. data/db/migrate/20181001162513_add_active_to_hospital_wards.rb +3 -1
  198. data/db/migrate/20181008144324_update_daily_letters_report_view_to_version_2.rb +0 -2
  199. data/db/migrate/20181008145159_create_reporting_daily_ukrdc_view.rb +0 -4
  200. data/db/migrate/20181013115138_update_reporting_daily_pathology_view_to_v2.rb +0 -2
  201. data/db/migrate/20181025170410_add_ukrdc_helper_column_to_patients.rb +0 -2
  202. data/db/migrate/20181026145459_create_ukrdc_batch_numbers.rb +5 -3
  203. data/db/migrate/20181106133500_update_hd_overall_audit_to_version_9.rb +0 -2
  204. data/db/migrate/20181109110616_create_hd_grouped_transmission_logs_view.rb +0 -2
  205. data/db/migrate/20181126090401_add_warnings_to_hd_transmission_logs.rb +7 -0
  206. data/db/migrate/20181126123745_refresh_hd_grouped_transmission_logs_view.rb +8 -0
  207. data/db/migrate/20181217124025_change_ukrdc_transmission_log_error_type.rb +15 -0
  208. data/db/seeds/default/practices/nhs_practices_sample.csv +2 -2
  209. data/db/seeds/default/practices/primary_care_physicians_sample.csv +2 -2
  210. data/lib/core_extensions/active_record/migration_helpers.rb +43 -1
  211. data/lib/renalware/engine.rb +2 -0
  212. data/lib/renalware/version.rb +1 -1
  213. metadata +55 -19
  214. data/lib/migration_helper.rb +0 -11
  215. data/vendor/assets/javascripts/renalware/moment.min.js +0 -1
  216. data/vendor/assets/javascripts/renalware/mousetrap.js +0 -1044
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7f543b009735c78575b8f6d11ae1ee251b3ff595550118d737a6447891b887c4
4
- data.tar.gz: 6ed8c8373cd2fc474cd3804156dba4b65c1e3c7dc7222330daa3724d00c4b011
3
+ metadata.gz: bf634cea697775671cc9b95511d93c3927bfaef385d14257daffa16ca86086bb
4
+ data.tar.gz: da6403cbe24ea79e5690cb0e767bf83fd3931495950ad2135ffc9b08cad32ce6
5
5
  SHA512:
6
- metadata.gz: 0fad1d755a7fef154aa5256d05f44ce2521d88da460bc52034daf78053ad1971901af7f5d4ae4019f10aba8299ea180e3475dbc7fe0391543d73961824edff5b
7
- data.tar.gz: 3839ac94706e0c7df71351f97694254cf62a151e563f5c194e8e621693d5bb240aa309240fdde97c90bdb71898bc4094f7b1112452ffe01043cb74e77a1e653b
6
+ metadata.gz: d2d4668c9ce60c07e2d66bd2676270342c087292d32737a03a4a5db0f953b6f3339573f1815ba4e0efc939979c67b2de3e5f0192f5d3a4fd7250b9de10b95580
7
+ data.tar.gz: 51c70c6a5b0d163669a13f5c3674afabb6dbdfd22093951521210b80d42d860c248a438c13c994b1f4a4cb103ea3969e1d856fd79c5631fb6f73557bb763b160
@@ -37,7 +37,7 @@
37
37
  //= require foundation-datepicker
38
38
  //= require renalware/clockpicker
39
39
  //= require cocoon
40
- //= require renalware/mousetrap
40
+ //= require mousetrap
41
41
  //= require renalware/iframeResizer
42
42
  //= require chosen-jquery
43
43
  //= require clipboard
@@ -45,7 +45,7 @@
45
45
  //= require rails.validations
46
46
  //= require rails.validations.simple_form
47
47
  //= require renalware/print.min
48
- //= require renalware/moment.min
48
+ //= require moment
49
49
  //= require_tree .
50
50
  //
51
51
 
@@ -10,7 +10,7 @@ module Renalware
10
10
  search = User
11
11
  .includes(:roles)
12
12
  .where.not(username: :systemuser)
13
- .search(query)
13
+ .ransack(query)
14
14
  users = search.result(distinct: true).page(page).per(per_page)
15
15
  authorize users
16
16
  render locals: { users: users, user_search: search }
@@ -10,16 +10,25 @@ module Renalware
10
10
 
11
11
  def show
12
12
  respond_to do |format|
13
- format.xml do
14
- render locals: {
15
- patient: patient_presenter
16
- }
17
- end
13
+ format.xml { render xml: patient_ukrdc_xml }
18
14
  end
19
15
  end
20
16
 
21
17
  private
22
18
 
19
+ def patient_ukrdc_xml
20
+ result = attempt_to_generate_patient_ukrdc_xml
21
+ if result.failure?
22
+ result.validation_errors.to_xml
23
+ else
24
+ result.xml
25
+ end
26
+ end
27
+
28
+ def attempt_to_generate_patient_ukrdc_xml
29
+ Renalware::UKRDC::XmlRenderer.new(locals: { patient: patient_presenter }).call
30
+ end
31
+
23
32
  def patient_presenter
24
33
  patient = Renalware::Patient.find_by!(secure_id: params[:id])
25
34
  authorize patient
@@ -30,65 +39,3 @@ module Renalware
30
39
  end
31
40
  end
32
41
  end
33
-
34
- # An alternative xml rendering implementation - moved to a template based approach
35
- # for now as its provides clarity
36
- #
37
-
38
- # class Base
39
- # include ActiveModel::Serializers::Xml
40
- # include Virtus::Model
41
- # end
42
-
43
- # class PatientNumber < Base
44
- # attribute :number, String
45
- # attribute :organisation, String
46
-
47
- # def self.build_nhs_number(number)
48
- # new(number: number, organisation: "NHS")
49
- # end
50
- # end
51
-
52
- # class Name < Base
53
- # attribute :prefix, String
54
- # attribute :family, String
55
- # attribute :given, String
56
- # attribute :suffix, String
57
- # attribute :use, String
58
- # end
59
-
60
- # class Patient < Base
61
- # attribute :gender, String # 0=Not Known 1=Male 2=Female 9=Not Specified.
62
- # attribute :birth_time, DateTime
63
- # attribute :death_time, DateTime
64
- # attribute :patient_numbers, Array(PatientNumber)
65
- # attribute :name, Name
66
- # attribute :country_of_birth, String # ISO 3166-1 3-char alphabetic code
67
- # end
68
-
69
- # rdc_patient = UKRDC::Patient.new(
70
- # gender: patient.sex&.code,
71
- # birth_time: patient.born_on,
72
- # death_time: patient.died_on,
73
- # country_of_birth: "???"
74
- # )
75
-
76
- # rdc_patient.name = Name.new(
77
- # prefix: patient.title,
78
- # family: patient.family_name,
79
- # given: patient.given_name,
80
- # suffix: patient.suffix
81
- # )
82
-
83
- # rdc_patient.patient_numbers << UKRDC::PatientNumber.build_nhs_number(patient.nhs_number)
84
- # Renalware.config.patient_hospital_identifiers.each do |_key, field|
85
- # number = patient.public_send(field)
86
- # unless number.blank?
87
- # patient_number = UKRDC::PatientNumber.new(number: number, organisation: "LOCALHOSP")
88
- # rdc_patient.patient_numbers << patient_number
89
- # end
90
- # end
91
-
92
- # # Render XML
93
- # respond_with rdc_patient, camelize: true
94
- #
@@ -78,7 +78,7 @@ module Renalware
78
78
 
79
79
  def prepare_drugs_search
80
80
  search_params = params.fetch(:q, {})
81
- @drugs_search = Drug.search(search_params)
81
+ @drugs_search = Drug.ransack(search_params)
82
82
  @drugs_search.sorts = "name"
83
83
  end
84
84
  end
@@ -43,7 +43,7 @@ module Renalware
43
43
  footer: {
44
44
  font_size: 8
45
45
  },
46
- show_as_html: Rails.env.development? && params.key?("debug")
46
+ show_as_html: (Rails.env.development? || Rails.env.test?) && params.key?("debug")
47
47
  }
48
48
  end
49
49
 
@@ -3,16 +3,19 @@
3
3
  module Renalware
4
4
  module Patients
5
5
  class BookmarksController < BaseController
6
+ include Concerns::Pageable
6
7
  before_action :load_patient, only: :create
7
8
 
8
9
  # Display the user's bookmarks
9
10
  def index
10
- bookmarks = Patients.cast_user(current_user)
11
- .bookmarks
12
- .ordered
13
- .includes(patient: [current_modality: :description])
11
+ search = BookmarksQuery.new(
12
+ default_relation: Patients.cast_user(current_user).bookmarks,
13
+ params: params[:q]
14
+ ).search
15
+
16
+ bookmarks = search.result.page(page).per(per_page)
14
17
  authorize bookmarks
15
- render locals: { bookmarks: bookmarks }
18
+ render locals: { bookmarks: bookmarks, search: search }
16
19
  end
17
20
 
18
21
  # idempotent
@@ -25,6 +28,7 @@ module Renalware
25
28
  end
26
29
 
27
30
  # idempotent
31
+ # rubocop:disable Metrics/AbcSize
28
32
  def destroy
29
33
  bookmark = user.bookmarks.find_by(id: params[:id])
30
34
  patient = bookmark&.patient
@@ -38,6 +42,7 @@ module Renalware
38
42
  redirect_back(fallback_location: patient_path(fallback_location),
39
43
  notice: success_msg_for("bookmark"))
40
44
  end
45
+ # rubocop:enable Metrics/AbcSize
41
46
 
42
47
  private
43
48
 
@@ -48,6 +53,12 @@ module Renalware
48
53
  def bookmark_params
49
54
  params.require(:patients_bookmark).permit(:notes, :urgent, :tags)
50
55
  end
56
+
57
+ def search_params
58
+ hash = params[:q] || {}
59
+ hash[:s] ||= "created_at desc"
60
+ hash
61
+ end
51
62
  end
52
63
  end
53
64
  end
@@ -8,7 +8,7 @@ module Renalware
8
8
  def index
9
9
  authorize Snippet, :index?
10
10
  snippets = snippets_for_author(author)
11
- search = snippets.search(params[:q])
11
+ search = snippets.ransack(params[:q])
12
12
  search.sorts = ["times_used desc", "last_used_on desc"] if search.sorts.empty?
13
13
  snippets = paginate(search.result, default_per_page: 10)
14
14
  render locals: { snippets: snippets, search: search, author: author }
@@ -27,7 +27,7 @@ module Renalware
27
27
  search = UserFeedback
28
28
  .includes(:author)
29
29
  .order(created_at: :desc)
30
- .search(search_params)
30
+ .ransack(search_params)
31
31
 
32
32
  feedback_msgs = search.result.page(page).per(per_page)
33
33
  authorize feedback_msgs
@@ -101,6 +101,7 @@ module Renalware
101
101
 
102
102
  class Complications < Document::Embedded
103
103
  attribute :access_site_status, Document::Enum
104
+ attribute :line_exit_site_status, Document::Enum
104
105
  attribute :was_dressing_changed, Document::Enum, enums: %i(yes no), default: :no
105
106
  attribute :had_mrsa_swab, Document::Enum, enums: %i(yes no), default: :no
106
107
  attribute :had_mssa_swab, Document::Enum, enums: %i(yes no), default: :no
@@ -21,7 +21,7 @@ module Renalware
21
21
  # It might be better to refactor PatientsRansackHelper so we can include where required
22
22
  # eg below using .extending(PatientsRansackHelper) rather than relying on it being in
23
23
  # included in the model file.
24
- # note that adding .includes(:created_by) her creates an ambigous column
24
+ # note that adding .includes(:created_by) here creates an ambigous column
25
25
  # 'family_name' error
26
26
  # rubocop:disable Metrics/MethodLength
27
27
  def search
@@ -25,6 +25,10 @@ module Renalware
25
25
  def self.policy_class
26
26
  BasePolicy
27
27
  end
28
+
29
+ def self.latest
30
+ ordered.first
31
+ end
28
32
  end
29
33
  end
30
34
  end
@@ -6,6 +6,7 @@ module Renalware
6
6
  module Clinical
7
7
  class Patient < ActiveType::Record[Renalware::Patient]
8
8
  has_many :allergies, dependent: :restrict_with_exception
9
+ has_many :dry_weights, dependent: :restrict_with_exception
9
10
 
10
11
  # These statuses match NHS standards for the display of recorded allergy status.
11
12
  # Note that
@@ -18,6 +19,10 @@ module Renalware
18
19
  no_known_allergies
19
20
  unavailable),
20
21
  default: "unrecorded"
22
+
23
+ def latest_dry_weight
24
+ @latest_dry_weight ||= dry_weights.latest
25
+ end
21
26
  end
22
27
  end
23
28
  end
@@ -14,7 +14,7 @@ module Renalware
14
14
  end
15
15
 
16
16
  def search
17
- @search ||= DryWeight.where(patient: @patient).search(@search_params)
17
+ @search ||= DryWeight.where(patient: @patient).ransack(@search_params)
18
18
  end
19
19
  end
20
20
  end
@@ -13,7 +13,7 @@ module Renalware
13
13
  end
14
14
 
15
15
  def search
16
- @search ||= QueryablePerson.search(@q)
16
+ @search ||= QueryablePerson.ransack(@q)
17
17
  end
18
18
 
19
19
  class QueryablePerson < ActiveType::Record[Person]
@@ -34,7 +34,7 @@ module Renalware
34
34
  .with_current_pathology
35
35
  .with_registration_statuses
36
36
  .with_current_modality_matching(MODALITY_NAMES)
37
- .search(params)
37
+ .ransack(params)
38
38
  end
39
39
  end
40
40
  # rubocop:enable Metrics/MethodLength
@@ -26,6 +26,12 @@ module Renalware
26
26
  modality_descriptions.exists?(type: "Renalware::HD::ModalityDescription")
27
27
  end
28
28
 
29
+ def current_modality_hd?
30
+ return false if current_modality.blank?
31
+
32
+ current_modality.description.is_a?(HD::ModalityDescription)
33
+ end
34
+
29
35
  def __getobj__
30
36
  self
31
37
  end
@@ -7,6 +7,14 @@ module Renalware
7
7
  nullify_significant_hd_profile_attributes(patient, by: actor)
8
8
  end
9
9
 
10
+ def request_default_electronic_cc_recipients_for_use_in_letters(patient:, array_of_user_ids:)
11
+ patient = HD.cast_patient(patient)
12
+ if patient.current_modality_hd?
13
+ named_nurse_id = patient.hd_profile&.named_nurse&.id
14
+ array_of_user_ids.push(named_nurse_id) if named_nurse_id.present?
15
+ end
16
+ end
17
+
10
18
  private
11
19
 
12
20
  def nullify_significant_hd_profile_attributes(patient, by:)
@@ -13,7 +13,7 @@ module Renalware
13
13
  end
14
14
 
15
15
  def search
16
- @search ||= Session::Open.search(@q)
16
+ @search ||= Session::Open.ransack(@q)
17
17
  end
18
18
  end
19
19
  end
@@ -14,7 +14,7 @@ module Renalware
14
14
  end
15
15
 
16
16
  def search
17
- @search ||= Session.where(patient: @patient).search(@q)
17
+ @search ||= Session.where(patient: @patient).ransack(@q)
18
18
  end
19
19
  end
20
20
  end
@@ -16,7 +16,7 @@ module Renalware
16
16
  end
17
17
 
18
18
  def search
19
- @search ||= Description.search(@search_params)
19
+ @search ||= Description.ransack(@search_params)
20
20
  end
21
21
  end
22
22
  end
@@ -5,11 +5,13 @@ require_dependency "renalware/letters"
5
5
  module Renalware
6
6
  module Letters
7
7
  # Build a new draft letter.
8
- # Used e.g from .
8
+ # Used e.g from:
9
9
  # - LettersController#new - when building the initial letter form
10
10
  # (in which case params are those suppplied in #new)
11
11
  # - LettersController#create via DraftLetter.build - before saving the letter, in which case
12
12
  # params is the posted hash of letter attributes from the html form.
13
+ # TODO: think about spitting this into 2 classes, one for build (new/get) and one for creating
14
+ # (create/post)?
13
15
  class LetterFactory
14
16
  def initialize(patient, params = {})
15
17
  @params = LetterParamsProcessor.new(patient).call(params)
@@ -18,13 +20,19 @@ module Renalware
18
20
  end
19
21
 
20
22
  def build
21
- @electronic_cc_recipient_ids = params.delete(:electronic_cc_recipient_ids)
23
+ # *Important this line is here and not in initialize. If moved to initialize we will get
24
+ # two copies of eCCs because of the way .with_contacts_as_default_ccs can be called
25
+ # before .build
26
+ @electronic_cc_recipient_ids = params.delete(:electronic_cc_recipient_ids) # see *
27
+
22
28
  @letter = build_letter
23
29
  build_electronic_ccs
24
30
  include_primary_care_physician_as_default_main_recipient
25
31
  assign_default_ccs
26
32
  build_salutation
27
33
  letter.pathology_timestamp = Time.zone.now
34
+ stub_letter_electronic_cc_recipient_ids_using_patients_default_eccs
35
+
28
36
  letter
29
37
  end
30
38
 
@@ -81,6 +89,51 @@ module Renalware
81
89
  end
82
90
  end
83
91
 
92
+ # Here we are doing thwo things:
93
+ #
94
+ # 1 We overwrite the ActiveRecord-generated 'electronic_cc_recipient_ids' property that would,
95
+ # if any electronic_cc_recipients where saved against the letter, return the ids of those
96
+ # recipients. This property is used in the letter form when displaying the selected eCC
97
+ # users in a multi-select list. It works as expected when editing
98
+ # letters that have a saved set of eCC recipients. But for the case when we are creating a
99
+ # new letter, where there are no saved eCC recipients BUT we want to *pre-select* zero or
100
+ # more default eCCs, ovewriting this property lets us spoof what AR would have done but
101
+ # instead of returning user ids resolved through the AR relationship (which would require
102
+ # those records to be saved) we return our own array. More on this next...
103
+ #
104
+ # 2 Inside our replacement #electronic_cc_recipient_ids property we resolve (collate, gather)
105
+ # the complete set of default eCC users (as an array of user ids) and return them.
106
+ # This lets us pre-select the default eCCs in the eCC multi-select
107
+ # UI component in the new letter form. The array of user ids is resolved by raising an
108
+ # event and asking any listeners to addd in their eCC suggestions.
109
+ # See ResolveDefaultElectronicCCs for details.
110
+ def stub_letter_electronic_cc_recipient_ids_using_patients_default_eccs
111
+ return unless building_new_letter?
112
+
113
+ letter.define_singleton_method(:electronic_cc_recipient_ids) do
114
+ ResolveDefaultElectronicCCs
115
+ .for(patient)
116
+ .broadcasting_to_configured_subscribers
117
+ .call
118
+ end
119
+ end
120
+
121
+ # We operate in two modes:
122
+ # 1. building a skeleton letter (with defaults) to display in new letter form
123
+ # 2. building the letter after an http post (ie in the controller create action in which case
124
+ # params will be fully populated.
125
+ # This helper method resolves which mode we are in.
126
+ # As letterhead_id is never passed when building a letter ready for display in the new form,
127
+ # we assume that if it is present it is because it is in the posted html form params ie
128
+ # we are going to go on and save the letter once built.
129
+ def building_letter_ready_to_save?
130
+ params.key?(:letterhead_id)
131
+ end
132
+
133
+ def building_new_letter?
134
+ !building_letter_ready_to_save?
135
+ end
136
+
84
137
  def build_salutation
85
138
  letter.salutation ||= begin
86
139
  main_recipient = letter.main_recipient