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

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