renalware-core 2.0.0.pre.beta7 → 2.0.0.pre.beta8

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 (204) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/javascripts/renalware/searchables.js +3 -0
  3. data/app/assets/javascripts/renalware/select2-ajax-search.js +86 -0
  4. data/app/assets/javascripts/renalware/sortable.js +12 -1
  5. data/app/assets/stylesheets/renalware/base/_variables.scss +7 -1
  6. data/app/assets/stylesheets/renalware/modules/_admissions.scss +39 -0
  7. data/app/assets/stylesheets/renalware/modules/_letters.scss +12 -0
  8. data/app/assets/stylesheets/renalware/modules/_messaging.scss +0 -4
  9. data/app/assets/stylesheets/renalware/partials/_animations.scss +12 -0
  10. data/app/assets/stylesheets/renalware/partials/_modal_window.scss +44 -0
  11. data/app/assets/stylesheets/renalware/partials/_tables.scss +6 -0
  12. data/app/controllers/renalware/admissions/requests_controller.rb +100 -0
  13. data/app/controllers/renalware/devise/passwords_controller.rb +6 -0
  14. data/app/controllers/renalware/letters/electronic_receipts_controller.rb +81 -0
  15. data/app/controllers/renalware/letters/letters_controller.rb +18 -3
  16. data/app/controllers/renalware/messaging/internal/messages_controller.rb +75 -0
  17. data/app/controllers/renalware/messaging/internal/receipts_controller.rb +74 -0
  18. data/app/controllers/renalware/patients/patients_controller.rb +11 -1
  19. data/app/controllers/renalware/session_timeout_controller.rb +1 -1
  20. data/app/documents/renalware/hd/profile_document.rb +1 -1
  21. data/app/helpers/renalware/application_helper.rb +5 -0
  22. data/app/helpers/renalware/xhr_helper.rb +7 -0
  23. data/app/models/concerns/renalware/deviseable.rb +1 -1
  24. data/app/models/renalware/admissions.rb +7 -0
  25. data/app/models/renalware/admissions/request.rb +23 -0
  26. data/app/models/renalware/admissions/request_reason.rb +11 -0
  27. data/app/models/renalware/feeds/message_processor.rb +2 -2
  28. data/app/models/renalware/feeds/persist_message.rb +2 -0
  29. data/app/models/renalware/hd/sessions/auditable_session.rb +4 -0
  30. data/app/models/renalware/hd/sessions/auditable_session_collection.rb +5 -0
  31. data/app/models/renalware/hd/update_rolling_patient_statistics.rb +2 -2
  32. data/app/models/renalware/letters/electronic_receipt.rb +35 -0
  33. data/app/models/renalware/letters/electronic_recipient_options.rb +78 -0
  34. data/app/models/renalware/letters/letter.rb +4 -0
  35. data/app/models/renalware/letters/letter_factory.rb +21 -1
  36. data/app/models/renalware/messaging.rb +21 -5
  37. data/app/models/renalware/messaging/internal/author.rb +11 -0
  38. data/app/models/renalware/messaging/internal/message.rb +15 -0
  39. data/app/models/renalware/messaging/internal/message_factory.rb +20 -0
  40. data/app/models/renalware/messaging/internal/message_form.rb +36 -0
  41. data/app/models/renalware/messaging/internal/message_form_builder.rb +52 -0
  42. data/app/models/renalware/messaging/internal/receipt.rb +26 -0
  43. data/app/models/renalware/messaging/internal/recipient.rb +12 -0
  44. data/app/models/renalware/messaging/internal/recipient_options.rb +87 -0
  45. data/app/models/renalware/messaging/internal/send_message.rb +24 -0
  46. data/app/models/renalware/messaging/message.rb +4 -3
  47. data/app/models/renalware/pathology.rb +1 -1
  48. data/app/models/renalware/pathology/message_param_parser.rb +2 -0
  49. data/app/models/renalware/patients/search_filter.rb +32 -0
  50. data/app/models/renalware/patients/search_form.rb +17 -0
  51. data/app/models/renalware/patients/search_query.rb +20 -21
  52. data/app/models/renalware/patients/summary.rb +1 -1
  53. data/app/models/renalware/user.rb +18 -2
  54. data/app/policies/renalware/admissions/request_policy.rb +8 -0
  55. data/app/policies/renalware/letters/electronic_receipt_policy.rb +23 -0
  56. data/app/policies/renalware/messaging/{message_policy.rb → internal/message_policy.rb} +2 -3
  57. data/app/policies/renalware/messaging/internal/receipt_policy.rb +25 -0
  58. data/app/presenters/renalware/dashboard/dashboard_presenter.rb +9 -2
  59. data/app/presenters/renalware/hd/station_presenter.rb +0 -1
  60. data/app/presenters/renalware/letters/electronic_receipt_presenter.rb +15 -0
  61. data/app/presenters/renalware/letters/letter_presenter.rb +5 -0
  62. data/app/presenters/renalware/mdm_presenter.rb +2 -0
  63. data/app/presenters/renalware/messaging/internal/message_presenter.rb +21 -0
  64. data/app/presenters/renalware/messaging/internal/receipt_presenter.rb +13 -0
  65. data/app/presenters/renalware/pathology/observation_presenter.rb +4 -0
  66. data/app/presenters/renalware/ukrdc/patient_presenter.rb +5 -0
  67. data/app/views/renalware/admissions/requests/_create_request_link.html.slim +10 -0
  68. data/app/views/renalware/admissions/requests/_form.html.slim +31 -0
  69. data/app/views/renalware/admissions/requests/_modal_dialog_placeholder.html.slim +2 -0
  70. data/app/views/renalware/admissions/requests/_request.html.slim +34 -0
  71. data/app/views/renalware/admissions/requests/_table.html.slim +19 -0
  72. data/app/views/renalware/admissions/requests/create.js.erb +3 -0
  73. data/app/views/renalware/admissions/requests/destroy.js.erb +3 -0
  74. data/app/views/renalware/admissions/requests/edit.html.slim +4 -0
  75. data/app/views/renalware/admissions/requests/edit.js.erb +4 -0
  76. data/app/views/renalware/admissions/requests/index.html.slim +3 -0
  77. data/app/views/renalware/admissions/requests/new.html.slim +4 -0
  78. data/app/views/renalware/admissions/requests/new.js.erb +4 -0
  79. data/app/views/renalware/admissions/requests/update.js.erb +9 -0
  80. data/app/views/renalware/api/ukrdc/patients/_allergies.xml.builder +1 -1
  81. data/app/views/renalware/api/ukrdc/patients/_clinical_relationships.xml.builder +0 -1
  82. data/app/views/renalware/api/ukrdc/patients/_lab_orders.xml.builder +7 -2
  83. data/app/views/renalware/api/ukrdc/patients/_observations.xml.builder +1 -1
  84. data/app/views/renalware/api/ukrdc/patients/_patient.xml.builder +2 -0
  85. data/app/views/renalware/api/ukrdc/patients/_sending_facility.xml.builder +1 -1
  86. data/app/views/renalware/api/ukrdc/patients/lab_orders/_lab_order.xml.builder +46 -0
  87. data/app/views/renalware/api/ukrdc/patients/lab_orders/_result_item.xml.builder +14 -0
  88. data/app/views/renalware/clinical/allergies/_mini.html.slim +1 -0
  89. data/app/views/renalware/dashboard/dashboards/_content.html.slim +6 -2
  90. data/app/views/renalware/dashboard/letters/_letter.html.slim +7 -7
  91. data/app/views/renalware/dashboard/letters/_table.html.slim +2 -2
  92. data/app/views/renalware/devise/passwords/edit.html.erb +27 -0
  93. data/app/views/renalware/devise/passwords/new.html.erb +18 -0
  94. data/app/views/renalware/devise/registrations/new.html.slim +25 -0
  95. data/app/views/renalware/letters/electronic_receipts/_table.html.slim +45 -0
  96. data/app/views/renalware/letters/electronic_receipts/mark_as_read.js.erb +6 -0
  97. data/app/views/renalware/letters/electronic_receipts/read.html.slim +5 -0
  98. data/app/views/renalware/letters/electronic_receipts/sent.html.slim +40 -0
  99. data/app/views/renalware/letters/electronic_receipts/unread.html.slim +5 -0
  100. data/app/views/renalware/letters/formatted_letters/_letter.html.slim +12 -1
  101. data/app/views/renalware/letters/letters/_actions.html.slim +1 -1
  102. data/app/views/renalware/letters/letters/_electronic_ccs.html.slim +16 -0
  103. data/app/views/renalware/letters/letters/_form.html.slim +8 -3
  104. data/app/views/renalware/letters/letters/edit.html.slim +7 -1
  105. data/app/views/renalware/letters/letters/new.html.slim +6 -1
  106. data/app/views/renalware/letters/shared/_electronic_cc_type_tabs.html.slim +7 -0
  107. data/app/views/renalware/messaging/{messages → internal/messages}/_form.html.slim +2 -1
  108. data/app/views/renalware/messaging/{messages → internal/messages}/_modal_dialog_placeholder.html.slim +0 -0
  109. data/app/views/renalware/messaging/{messages → internal/messages}/_send_message_link.html.slim +1 -1
  110. data/app/views/renalware/messaging/{messages → internal/messages}/_send_reply_link.html.slim +3 -3
  111. data/app/views/renalware/messaging/{messages → internal/messages}/create.js.erb +0 -0
  112. data/app/views/renalware/messaging/{messages → internal/messages}/new.html.slim +0 -0
  113. data/app/views/renalware/messaging/{messages → internal/messages}/new.js.erb +0 -0
  114. data/app/views/renalware/messaging/{receipts → internal/receipts}/_receipt.html.slim +2 -2
  115. data/app/views/renalware/messaging/{messages/_message.html.slim → internal/receipts/_sent_receipt.html.slim} +2 -1
  116. data/app/views/renalware/messaging/internal/receipts/_sent_table.html.slim +12 -0
  117. data/app/views/renalware/messaging/{receipts → internal/receipts}/_table.html.slim +2 -2
  118. data/app/views/renalware/messaging/{receipts → internal/receipts}/mark_as_read.js.erb +0 -0
  119. data/app/views/renalware/messaging/{receipts → internal/receipts}/read.html.slim +2 -1
  120. data/app/views/renalware/messaging/internal/receipts/sent.html.slim +7 -0
  121. data/app/views/renalware/messaging/{receipts → internal/receipts}/unread.html.slim +2 -1
  122. data/app/views/renalware/messaging/shared/_messages_type_tabs.html.slim +3 -3
  123. data/app/views/renalware/navigation/_main.html.slim +1 -1
  124. data/app/views/renalware/navigation/_patients_admin.html.slim +2 -0
  125. data/app/views/renalware/navigation/_user.html.slim +2 -1
  126. data/app/views/renalware/patients/_search_form.html.slim +12 -0
  127. data/app/views/renalware/patients/side_menu/_actions.html.slim +6 -2
  128. data/app/views/renalware/renal/profiles/_form.html.slim +0 -1
  129. data/app/views/renalware/renal/profiles/_mini.html.slim +1 -0
  130. data/app/views/renalware/{snippets/snippets → shared}/_modal_close_link.html.slim +0 -0
  131. data/app/views/renalware/snippets/snippets/_list.html.slim +1 -1
  132. data/app/views/renalware/transplants/donations/_form.html.slim +17 -16
  133. data/config/initializers/simple_form_foundation.rb +0 -1
  134. data/config/locales/renalware/admissions/requests.en.yml +12 -0
  135. data/config/locales/renalware/letters/contact.en.yml +3 -0
  136. data/config/locales/renalware/messaging/internal/messages.en.yml +33 -0
  137. data/config/locales/renalware/patients/search_form.en.yml +5 -0
  138. data/config/locales/renalware/patients/side_menu.en.yml +1 -0
  139. data/config/routes.rb +32 -10
  140. data/db/migrate/20170908155011_add_shortfall_column_to_hd_patient_statistics.rb +7 -0
  141. data/db/migrate/20170908160250_update_hd_overall_audit_to_version4.rb +8 -0
  142. data/db/migrate/20170911133224_add_type_to_messaging_messages.rb +16 -0
  143. data/db/migrate/20170912092135_create_letters_electronic_receipts.rb +11 -0
  144. data/db/migrate/20170920113628_create_admissions_requests.rb +31 -0
  145. data/db/seeds/default/reporting/audits.yml +1 -0
  146. data/db/views/reporting_hd_overall_audit_v04.sql +13 -0
  147. data/lib/renalware/version.rb +1 -1
  148. data/lib/subscription_registry.rb +1 -1
  149. data/spec/factories/accesses/plans.rb +2 -3
  150. data/spec/factories/accesses/profiles.rb +1 -2
  151. data/spec/factories/admissions/request_reasons.rb +8 -0
  152. data/spec/factories/admissions/requests.rb +9 -0
  153. data/spec/factories/clinical/body_compositions.rb +2 -5
  154. data/spec/factories/clinical/dry_weights.rb +2 -3
  155. data/spec/factories/clinics/clinic_visits.rb +2 -3
  156. data/spec/factories/directory/people.rb +1 -2
  157. data/spec/factories/events/events.rb +1 -2
  158. data/spec/factories/hd/preference_sets.rb +1 -2
  159. data/spec/factories/hd/profiles.rb +2 -3
  160. data/spec/factories/hd/sessions.rb +4 -3
  161. data/spec/factories/letters/electronic_receipts.rb +6 -0
  162. data/spec/factories/letters/letters.rb +3 -3
  163. data/spec/factories/medications/prescription.rb +1 -2
  164. data/spec/factories/medications/prescription_terminations.rb +1 -2
  165. data/spec/factories/messaging/internal/authors.rb +5 -0
  166. data/spec/factories/messaging/{message.rb → internal/messages.rb} +1 -1
  167. data/spec/factories/messaging/internal/receipts.rb +7 -0
  168. data/spec/factories/messaging/internal/recipients.rb +5 -0
  169. data/spec/factories/modalities/modalities.rb +1 -3
  170. data/spec/factories/pathology/requests/request.rb +1 -3
  171. data/spec/factories/patients/alerts.rb +1 -2
  172. data/spec/factories/patients/patients.rb +5 -3
  173. data/spec/factories/pd/assessments.rb +1 -2
  174. data/spec/factories/pd/fluid_descriptions.rb +0 -1
  175. data/spec/factories/pd/training_sessions.rb +1 -2
  176. data/spec/factories/problems/problems.rb +1 -2
  177. data/spec/factories/shared/accountable.rb +35 -0
  178. data/spec/factories/system/roles.rb +2 -4
  179. data/spec/factories/system/users.rb +30 -15
  180. data/spec/factories/transplants/donor_stage.rb +1 -2
  181. data/spec/factories/transplants/registration_statuses.rb +2 -4
  182. data/spec/support/login_macros.rb +1 -1
  183. metadata +108 -40
  184. data/app/controllers/renalware/messaging/messages_controller.rb +0 -73
  185. data/app/controllers/renalware/messaging/receipts_controller.rb +0 -55
  186. data/app/controllers/renalware/messaging/sent_messages_controller.rb +0 -22
  187. data/app/models/renalware/messaging/author.rb +0 -9
  188. data/app/models/renalware/messaging/message_factory.rb +0 -18
  189. data/app/models/renalware/messaging/message_form.rb +0 -34
  190. data/app/models/renalware/messaging/message_form_builder.rb +0 -50
  191. data/app/models/renalware/messaging/receipt.rb +0 -19
  192. data/app/models/renalware/messaging/recipient.rb +0 -10
  193. data/app/models/renalware/messaging/recipient_options.rb +0 -85
  194. data/app/models/renalware/messaging/send_message.rb +0 -22
  195. data/app/policies/renalware/messaging/receipt_policy.rb +0 -19
  196. data/app/presenters/renalware/messaging/internal_message_presenter.rb +0 -19
  197. data/app/presenters/renalware/messaging/receipt_presenter.rb +0 -11
  198. data/app/views/renalware/devise/registrations/new.html.erb +0 -46
  199. data/app/views/renalware/messaging/messages/_table.html.slim +0 -13
  200. data/app/views/renalware/messaging/messages/sent.html.slim +0 -4
  201. data/config/locales/renalware/messaging/messages.en.yml +0 -29
  202. data/spec/factories/messaging/authors.rb +0 -5
  203. data/spec/factories/messaging/receipt.rb +0 -7
  204. data/spec/factories/messaging/recipients.rb +0 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 45b6a3aae38e2bb5cf1f105577622755367bdabb
4
- data.tar.gz: cf3152a078fcca9432a71205f8c6272499b42d8c
3
+ metadata.gz: 48da8a752afcae1698bfbac69a302d09fdbdc138
4
+ data.tar.gz: 75555d147b8c89f45db9520c53f3f7396f4aa4ae
5
5
  SHA512:
6
- metadata.gz: 6bb61647bfbb4cf91c7e45138c165dc7a8d38c0205c2d4541dee5f32e8dc45663b9a8ac16e25e11ef73e33d2743674a1797f3914ddcf3e6bd1bed342de6151cd
7
- data.tar.gz: f8a21c784e7394d2ae5fb9bbfa215bbe4a0d5e09a135b9012a522b258cf8418c0bc182a8c00a419fa27cae01f178f68d9d1865d0fc89edc860629d849e0650f8
6
+ metadata.gz: 4ae47acd62d54ce91497f923e8b47a05da642adff28b677c9ed9227e512038ed2d6c7f08df8c0a20b55b12f0b758cce0b9d827f64190f8bccb6a1936b5940c76
7
+ data.tar.gz: 14e910d6d6c74efa0a60417b6ec21053d0a81d52dacb0ce441078feba353fc2137c01f681777871526469317e856b57bc1460cfe631dd58d38b8585320b6854b
@@ -0,0 +1,3 @@
1
+ $(function() {
2
+ $(".searchable_select").select2();
3
+ });
@@ -0,0 +1,86 @@
1
+ // Generic select2 ajax autocomplete search using Select2
2
+ // Example usage (slim):
3
+ // select.select2-ajax-search(
4
+ // data: {
5
+ // "ajax--url" => search_patients_path(format: :json),
6
+ // "default-value" => {id: 23, text: "CROSBY, Bing (1234567913)",
7
+ // "placeholder" => "Start entering the last name (min. 3 characters)"
8
+ // }
9
+ // )
10
+ //
11
+ //
12
+ // For default value to be loaded into the select2 correctly,
13
+ // the select must have a data-value attribute which is a hash in the format
14
+ // that would also be returned from the api eg
15
+ // = f.input :x, data: {
16
+ // "default-value" => {id: 23, text: "WRIGHT, Katie (1234567913)",
17
+ // "ajax--url" => "/patients/search.json"
18
+ // }
19
+ var Renalware = typeof Renalware === 'undefined' ? {} : Renalware;
20
+
21
+ Renalware.AjaxSearch = (function() {
22
+
23
+ function processData(data) {
24
+ // Note that the json api already formats the data as id: and text: so there
25
+ // is nothing to do here, other than wrap it in a hash, but if that changes use something
26
+ // like this to map the json objects into the {id:, text:} objects select2 expects.
27
+ // var mapdata = $.map(data, function (obj) {
28
+ // obj.id = obj.id;
29
+ // obj.text = obj.text;
30
+ // return obj;
31
+ // });
32
+ return { results: data };
33
+ }
34
+
35
+ var initAjaxSearch = function(){
36
+
37
+ $(".select2-ajax-search").each(function (index, element) {
38
+ var item = $(element);
39
+
40
+ // If there is a default item to display in the select2, wrap it in an array
41
+ // and we'll load it in the initial data
42
+ var defaultSelectedItem = [$(item).data("default-value")];
43
+
44
+ // A place holder is required if you want to use the X button and allowClear to clear
45
+ // the selection.
46
+ var placeholder = $(item).data("placeholder") || "Start typing (min. 3 characters)";
47
+
48
+ $(item).select2({
49
+ allowClear: true,
50
+ placeholder: placeholder,
51
+ ajax: {
52
+ dataType: 'json',
53
+ delay: 250,
54
+ processResults: processData,
55
+ cache: false
56
+ },
57
+ data: processData(defaultSelectedItem).results,
58
+ minimumInputLength: 3,
59
+ escapeMarkup: function (m) { return m; }
60
+ })
61
+ });
62
+
63
+ // When the select is cleared using the X link, it does not automatically remove any selected
64
+ // <options>s from the <select> (you can see this e.g. in Chrome tools). So we have to
65
+ // pragmatically do this - and using a timeout prevents clashing with the select2 clear
66
+ // mechanism.
67
+ $('.select2-ajax-search').on('select2:unselect', function (e) {
68
+ var _this = $(this);
69
+ var removeRedundantOptionFromSelect = function() {
70
+ $(_this).html('<option></option>').trigger('change');
71
+ }
72
+ setTimeout(removeRedundantOptionFromSelect, 200);
73
+ });
74
+ };
75
+
76
+ return {
77
+ init: function () {
78
+ initAjaxSearch()
79
+ }
80
+ };
81
+ })();
82
+
83
+ $(document).ready(Renalware.AjaxSearch.init);
84
+ $(document).on('opened.fndtn.reveal', '[data-reveal]', function() {
85
+ Renalware.AjaxSearch.init();
86
+ });
@@ -24,8 +24,19 @@ function initSortables() {
24
24
  url: $(this).data("rel"),
25
25
  dataType: 'json',
26
26
  data: $(this).sortable("serialize"),
27
- success: function() {
27
+ success: function(sortedArrayOfModelIds) { // eg ["4", "3", "1", "2"]
28
28
  $(elem).effect("highlight", {}, 1000);
29
+ // If the the sorted element and its siblings have a child element with a
30
+ // .sortable-position-for-model-id-X class, update the content of each
31
+ // with the new position returned from the server.
32
+ // This lets us display the new sort order position eg for each row in a table
33
+ // without having to reload all the sortables.
34
+ var parent = $(elem).parent(".sortables")
35
+ for (var position = 0; position < sortedArrayOfModelIds.length; position++) {
36
+ modelId = sortedArrayOfModelIds[position];
37
+ var sortable = $(".sortable-position-for-model-id-" + modelId, parent);
38
+ $(sortable, parent).html(position + 1);
39
+ };
29
40
  }
30
41
  });
31
42
  }
@@ -47,6 +47,7 @@ $white: #FFF;
47
47
  $off-white: #EEE;
48
48
  $dark-grey: #222;
49
49
  $muted-dark-grey: #555;
50
+ $winter-sky: #AAA;
50
51
  $light-grey: #DDD;
51
52
  $mid-grey: #999;
52
53
  $very-light-grey: #f5f5f5;
@@ -66,13 +67,18 @@ $patient-header-bg-color: $nhs-blue;
66
67
  $bookmark-urgent-colour: #FFFFC8;
67
68
 
68
69
  // Letter states
69
-
70
70
  $letter-state-unknown: $mid-grey;
71
71
  $letter-state-draft: $nhs-aqua-blue;
72
72
  $letter-state-pending-review: $nhs-orange;
73
73
  $letter-state-approved: $nhs-green;
74
74
  $letter-state-completed: $nhs-dark-green;
75
75
 
76
+ // Admission Request priority but can be used elsewhere
77
+ $priority-urgent: $nhs-dark-red;
78
+ $priority-high: $nhs-red;
79
+ $priority-medium: $nhs-warm-yellow;
80
+ $priority-low: $nhs-green;
81
+
76
82
  // Modals
77
83
  $max-modal-height: 600px;
78
84
 
@@ -0,0 +1,39 @@
1
+ #admissions-request-modal {
2
+ .admissions-request-patient {
3
+ margin-bottom: 1rem;
4
+ }
5
+ }
6
+
7
+ .admissions_requests {
8
+
9
+ td.priority {
10
+ span {
11
+ @include badge;
12
+ }
13
+ }
14
+
15
+ tr.priority-urgent {
16
+ td.priority span {
17
+ background-color: $priority-urgent;
18
+ }
19
+ }
20
+
21
+
22
+ tr.priority-high {
23
+ td.priority span {
24
+ background-color: $priority-high;
25
+ }
26
+ }
27
+
28
+ tr.priority-medium {
29
+ td.priority span {
30
+ background-color: $priority-medium;
31
+ }
32
+ }
33
+
34
+ tr.priority-low {
35
+ td.priority span {
36
+ background-color: $priority-low;
37
+ }
38
+ }
39
+ }
@@ -1,4 +1,16 @@
1
1
 
2
+ .electronic-ccs {
3
+ ul.actions {
4
+ list-style: none;
5
+ text-align: right;
6
+
7
+ .button {
8
+ padding: 0.4rem .6rem;
9
+ margin: 0.3rem 0 0.2rem 0;
10
+ }
11
+ }
12
+ }
13
+
2
14
  .letter-preview-admin {
3
15
  margin-top: -0.3em;
4
16
  padding-top: 10px;
@@ -32,10 +32,6 @@
32
32
  font-weight: bold;
33
33
  margin: 0 0 0.5rem;
34
34
  }
35
-
36
- .body {
37
-
38
- }
39
35
  }
40
36
 
41
37
  h2 {
@@ -0,0 +1,12 @@
1
+ @keyframes highlight {
2
+ 0% {
3
+ background: $nhs-yellow
4
+ }
5
+ 100% {
6
+ background: none;
7
+ }
8
+ }
9
+
10
+ .post-action-highlight {
11
+ animation: highlight 1.5s;
12
+ }
@@ -1,3 +1,47 @@
1
+ .modal {
2
+ .modal__header {
3
+ border-bottom: solid 1px $winter-sky;
4
+ margin-bottom: 10px;
5
+
6
+ h1, h2 {
7
+ margin: 0 0 0.5rem 0;
8
+ font-size: 1.3rem;
9
+ color: $dark-grey;
10
+ }
11
+
12
+ .reveal-modal-close {
13
+ position: absolute;
14
+ top: 0.3rem;
15
+ right: 0.8rem;
16
+ font-size: 1.5rem;
17
+ color: $winter-sky;
18
+ padding: 0.2rem;
19
+ font-weight: normal;
20
+
21
+ i {
22
+ padding-right: 5px;
23
+ }
24
+ }
25
+ }
26
+
27
+ .modal__body {
28
+ /* remove excessive l and r padding in modals */
29
+ .row {
30
+ margin-left: 0;
31
+ margin-right: 0;
32
+ max-width: 100%;
33
+
34
+ .columns {
35
+ padding-left: 0;
36
+ padding-right: 0;
37
+ }
38
+ }
39
+ }
40
+
41
+ .modal__footer {
42
+ }
43
+ }
44
+
1
45
  .modal-show {
2
46
  position: relative;
3
47
  background: $oil;
@@ -93,6 +93,10 @@ table {
93
93
 
94
94
  &:last-child {
95
95
  border-right: 0;
96
+
97
+ &.actions {
98
+ text-align: right;
99
+ }
96
100
  }
97
101
  }
98
102
 
@@ -112,6 +116,8 @@ table {
112
116
  min-width: 15rem;
113
117
  max-width: 20rem;
114
118
  }
119
+
120
+
115
121
  }
116
122
 
117
123
  tr th,
@@ -0,0 +1,100 @@
1
+ require "renalware/admissions"
2
+
3
+ module Renalware
4
+ module Admissions
5
+ class RequestsController < BaseController
6
+ include Renalware::Concerns::Pageable
7
+
8
+ def index
9
+ requests = Request.ordered.all.page(page).per(per_page)
10
+ authorize requests
11
+ render locals: { requests: requests }
12
+ end
13
+
14
+ def new
15
+ request = Request.new(patient: patient)
16
+ authorize request
17
+ render_new(request)
18
+ end
19
+
20
+ def create
21
+ request = Request.new(request_params)
22
+ authorize request
23
+ unless request.save_by(current_user)
24
+ return render_new(request)
25
+ end
26
+ flash.now[:notice] = success_msg_for("admission request")
27
+ end
28
+
29
+ def edit
30
+ request = find_request
31
+ authorize request
32
+ render_edit(request)
33
+ end
34
+
35
+ def update
36
+ request = find_request
37
+ authorize request
38
+ request.by = current_user
39
+
40
+ if request.update(request_params)
41
+ flash.now[:notice] = success_msg_for("admission request")
42
+ render locals: { request: request }
43
+ else
44
+ render_edit(request)
45
+ end
46
+ end
47
+
48
+ def destroy
49
+ request = find_request
50
+ authorize request
51
+ request.destroy!
52
+ flash.now[:notice] = success_msg_for("admission request")
53
+ render locals: { request_id: request_id }
54
+ end
55
+
56
+ def sort
57
+ authorize Request, :sort?
58
+ ids = params["admissions_request"]
59
+ Request.sort(ids)
60
+ render json: ids
61
+ end
62
+
63
+ private
64
+
65
+ def patient
66
+ Patient.find(params[:patient_id])
67
+ end
68
+
69
+ def render_new(request)
70
+ render :new, locals: {
71
+ request: request,
72
+ reasons: RequestReason.ordered.pluck(:description, :id),
73
+ hospital_units: Hospitals::Unit.ordered.pluck(:name, :id)
74
+ }, layout: false
75
+ end
76
+
77
+ def render_edit(request)
78
+ render :edit, locals: {
79
+ request: request,
80
+ reasons: RequestReason.ordered.pluck(:description, :id),
81
+ hospital_units: Hospitals::Unit.ordered.pluck(:name, :id)
82
+ }, layout: false
83
+ end
84
+
85
+ def find_request
86
+ Request.find(request_id)
87
+ end
88
+
89
+ def request_id
90
+ params[:id]
91
+ end
92
+
93
+ def request_params
94
+ params
95
+ .require(:admissions_request)
96
+ .permit(:patient_id, :reason_id, :notes, :hospital_unit_id, :priority)
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,6 @@
1
+ class Renalware::Devise::PasswordsController < ::Devise::PasswordsController
2
+ helper Renalware::ApplicationHelper
3
+ include Renalware::Concerns::DeviseControllerMethods
4
+
5
+ layout "renalware/layouts/application"
6
+ end
@@ -0,0 +1,81 @@
1
+ require_dependency "renalware/letters"
2
+ require "collection_presenter"
3
+
4
+ module Renalware
5
+ module Letters
6
+ class ElectronicReceiptsController < BaseController
7
+ include Renalware::Concerns::Pageable
8
+
9
+ # PATCH
10
+ def mark_as_read
11
+ authorize receipt
12
+ receipt.update(read_at: Time.zone.now)
13
+ render locals: {
14
+ receipt: ElectronicReceiptPresenter.new(receipt),
15
+ layout: false
16
+ }
17
+ end
18
+
19
+ # GET all unread electronic CCs
20
+ def unread
21
+ render_receipts(received_receipts.unread)
22
+ end
23
+
24
+ # GET all read electronic CCs
25
+ def read
26
+ render_receipts(received_receipts.read)
27
+ end
28
+
29
+ # GET all electronic CCs sent by the current user
30
+ def sent
31
+ render_receipts(sent_receipts)
32
+ end
33
+
34
+ private
35
+
36
+ def render_receipts(receipts)
37
+ patient_filter = Patients::SearchFilter.new(search_term, request)
38
+ receipts = receipts.joins(letter: [:patient])
39
+ receipts = patient_filter.call(receipts).ordered.page(page).per(per_page)
40
+ authorize receipts
41
+
42
+ render locals: {
43
+ receipts: present_receipts(receipts),
44
+ search_form: patient_filter.search_form
45
+ }
46
+ end
47
+
48
+ def build_search_form_object
49
+ Patients::SearchForm.new(
50
+ term: search_term,
51
+ url: request.path
52
+ )
53
+ end
54
+
55
+ # def filter_receipts(receipts, search_form)
56
+ # matching_patients = Patients::SearchQuery.new(term: search_form.term).call
57
+ # receipts.joins(letter: [:patient]).merge(matching_patients)
58
+ # end
59
+
60
+ def search_term
61
+ params.fetch(:patient_search, {}).fetch(:term, nil)
62
+ end
63
+
64
+ def receipt
65
+ ElectronicReceipt.find_by!(letter_id: params[:letter_id], id: params[:id])
66
+ end
67
+
68
+ def received_receipts
69
+ ElectronicReceipt.where(recipient_id: current_user.id)
70
+ end
71
+
72
+ def sent_receipts
73
+ ElectronicReceipt.sent_by(current_user.id)
74
+ end
75
+
76
+ def present_receipts(receipts)
77
+ CollectionPresenter.new(receipts, ElectronicReceiptPresenter)
78
+ end
79
+ end
80
+ end
81
+ end