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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/renalware/searchables.js +3 -0
- data/app/assets/javascripts/renalware/select2-ajax-search.js +86 -0
- data/app/assets/javascripts/renalware/sortable.js +12 -1
- data/app/assets/stylesheets/renalware/base/_variables.scss +7 -1
- data/app/assets/stylesheets/renalware/modules/_admissions.scss +39 -0
- data/app/assets/stylesheets/renalware/modules/_letters.scss +12 -0
- data/app/assets/stylesheets/renalware/modules/_messaging.scss +0 -4
- data/app/assets/stylesheets/renalware/partials/_animations.scss +12 -0
- data/app/assets/stylesheets/renalware/partials/_modal_window.scss +44 -0
- data/app/assets/stylesheets/renalware/partials/_tables.scss +6 -0
- data/app/controllers/renalware/admissions/requests_controller.rb +100 -0
- data/app/controllers/renalware/devise/passwords_controller.rb +6 -0
- data/app/controllers/renalware/letters/electronic_receipts_controller.rb +81 -0
- data/app/controllers/renalware/letters/letters_controller.rb +18 -3
- data/app/controllers/renalware/messaging/internal/messages_controller.rb +75 -0
- data/app/controllers/renalware/messaging/internal/receipts_controller.rb +74 -0
- data/app/controllers/renalware/patients/patients_controller.rb +11 -1
- data/app/controllers/renalware/session_timeout_controller.rb +1 -1
- data/app/documents/renalware/hd/profile_document.rb +1 -1
- data/app/helpers/renalware/application_helper.rb +5 -0
- data/app/helpers/renalware/xhr_helper.rb +7 -0
- data/app/models/concerns/renalware/deviseable.rb +1 -1
- data/app/models/renalware/admissions.rb +7 -0
- data/app/models/renalware/admissions/request.rb +23 -0
- data/app/models/renalware/admissions/request_reason.rb +11 -0
- data/app/models/renalware/feeds/message_processor.rb +2 -2
- data/app/models/renalware/feeds/persist_message.rb +2 -0
- data/app/models/renalware/hd/sessions/auditable_session.rb +4 -0
- data/app/models/renalware/hd/sessions/auditable_session_collection.rb +5 -0
- data/app/models/renalware/hd/update_rolling_patient_statistics.rb +2 -2
- data/app/models/renalware/letters/electronic_receipt.rb +35 -0
- data/app/models/renalware/letters/electronic_recipient_options.rb +78 -0
- data/app/models/renalware/letters/letter.rb +4 -0
- data/app/models/renalware/letters/letter_factory.rb +21 -1
- data/app/models/renalware/messaging.rb +21 -5
- data/app/models/renalware/messaging/internal/author.rb +11 -0
- data/app/models/renalware/messaging/internal/message.rb +15 -0
- data/app/models/renalware/messaging/internal/message_factory.rb +20 -0
- data/app/models/renalware/messaging/internal/message_form.rb +36 -0
- data/app/models/renalware/messaging/internal/message_form_builder.rb +52 -0
- data/app/models/renalware/messaging/internal/receipt.rb +26 -0
- data/app/models/renalware/messaging/internal/recipient.rb +12 -0
- data/app/models/renalware/messaging/internal/recipient_options.rb +87 -0
- data/app/models/renalware/messaging/internal/send_message.rb +24 -0
- data/app/models/renalware/messaging/message.rb +4 -3
- data/app/models/renalware/pathology.rb +1 -1
- data/app/models/renalware/pathology/message_param_parser.rb +2 -0
- data/app/models/renalware/patients/search_filter.rb +32 -0
- data/app/models/renalware/patients/search_form.rb +17 -0
- data/app/models/renalware/patients/search_query.rb +20 -21
- data/app/models/renalware/patients/summary.rb +1 -1
- data/app/models/renalware/user.rb +18 -2
- data/app/policies/renalware/admissions/request_policy.rb +8 -0
- data/app/policies/renalware/letters/electronic_receipt_policy.rb +23 -0
- data/app/policies/renalware/messaging/{message_policy.rb → internal/message_policy.rb} +2 -3
- data/app/policies/renalware/messaging/internal/receipt_policy.rb +25 -0
- data/app/presenters/renalware/dashboard/dashboard_presenter.rb +9 -2
- data/app/presenters/renalware/hd/station_presenter.rb +0 -1
- data/app/presenters/renalware/letters/electronic_receipt_presenter.rb +15 -0
- data/app/presenters/renalware/letters/letter_presenter.rb +5 -0
- data/app/presenters/renalware/mdm_presenter.rb +2 -0
- data/app/presenters/renalware/messaging/internal/message_presenter.rb +21 -0
- data/app/presenters/renalware/messaging/internal/receipt_presenter.rb +13 -0
- data/app/presenters/renalware/pathology/observation_presenter.rb +4 -0
- data/app/presenters/renalware/ukrdc/patient_presenter.rb +5 -0
- data/app/views/renalware/admissions/requests/_create_request_link.html.slim +10 -0
- data/app/views/renalware/admissions/requests/_form.html.slim +31 -0
- data/app/views/renalware/admissions/requests/_modal_dialog_placeholder.html.slim +2 -0
- data/app/views/renalware/admissions/requests/_request.html.slim +34 -0
- data/app/views/renalware/admissions/requests/_table.html.slim +19 -0
- data/app/views/renalware/admissions/requests/create.js.erb +3 -0
- data/app/views/renalware/admissions/requests/destroy.js.erb +3 -0
- data/app/views/renalware/admissions/requests/edit.html.slim +4 -0
- data/app/views/renalware/admissions/requests/edit.js.erb +4 -0
- data/app/views/renalware/admissions/requests/index.html.slim +3 -0
- data/app/views/renalware/admissions/requests/new.html.slim +4 -0
- data/app/views/renalware/admissions/requests/new.js.erb +4 -0
- data/app/views/renalware/admissions/requests/update.js.erb +9 -0
- data/app/views/renalware/api/ukrdc/patients/_allergies.xml.builder +1 -1
- data/app/views/renalware/api/ukrdc/patients/_clinical_relationships.xml.builder +0 -1
- data/app/views/renalware/api/ukrdc/patients/_lab_orders.xml.builder +7 -2
- data/app/views/renalware/api/ukrdc/patients/_observations.xml.builder +1 -1
- data/app/views/renalware/api/ukrdc/patients/_patient.xml.builder +2 -0
- data/app/views/renalware/api/ukrdc/patients/_sending_facility.xml.builder +1 -1
- data/app/views/renalware/api/ukrdc/patients/lab_orders/_lab_order.xml.builder +46 -0
- data/app/views/renalware/api/ukrdc/patients/lab_orders/_result_item.xml.builder +14 -0
- data/app/views/renalware/clinical/allergies/_mini.html.slim +1 -0
- data/app/views/renalware/dashboard/dashboards/_content.html.slim +6 -2
- data/app/views/renalware/dashboard/letters/_letter.html.slim +7 -7
- data/app/views/renalware/dashboard/letters/_table.html.slim +2 -2
- data/app/views/renalware/devise/passwords/edit.html.erb +27 -0
- data/app/views/renalware/devise/passwords/new.html.erb +18 -0
- data/app/views/renalware/devise/registrations/new.html.slim +25 -0
- data/app/views/renalware/letters/electronic_receipts/_table.html.slim +45 -0
- data/app/views/renalware/letters/electronic_receipts/mark_as_read.js.erb +6 -0
- data/app/views/renalware/letters/electronic_receipts/read.html.slim +5 -0
- data/app/views/renalware/letters/electronic_receipts/sent.html.slim +40 -0
- data/app/views/renalware/letters/electronic_receipts/unread.html.slim +5 -0
- data/app/views/renalware/letters/formatted_letters/_letter.html.slim +12 -1
- data/app/views/renalware/letters/letters/_actions.html.slim +1 -1
- data/app/views/renalware/letters/letters/_electronic_ccs.html.slim +16 -0
- data/app/views/renalware/letters/letters/_form.html.slim +8 -3
- data/app/views/renalware/letters/letters/edit.html.slim +7 -1
- data/app/views/renalware/letters/letters/new.html.slim +6 -1
- data/app/views/renalware/letters/shared/_electronic_cc_type_tabs.html.slim +7 -0
- data/app/views/renalware/messaging/{messages → internal/messages}/_form.html.slim +2 -1
- data/app/views/renalware/messaging/{messages → internal/messages}/_modal_dialog_placeholder.html.slim +0 -0
- data/app/views/renalware/messaging/{messages → internal/messages}/_send_message_link.html.slim +1 -1
- data/app/views/renalware/messaging/{messages → internal/messages}/_send_reply_link.html.slim +3 -3
- data/app/views/renalware/messaging/{messages → internal/messages}/create.js.erb +0 -0
- data/app/views/renalware/messaging/{messages → internal/messages}/new.html.slim +0 -0
- data/app/views/renalware/messaging/{messages → internal/messages}/new.js.erb +0 -0
- data/app/views/renalware/messaging/{receipts → internal/receipts}/_receipt.html.slim +2 -2
- data/app/views/renalware/messaging/{messages/_message.html.slim → internal/receipts/_sent_receipt.html.slim} +2 -1
- data/app/views/renalware/messaging/internal/receipts/_sent_table.html.slim +12 -0
- data/app/views/renalware/messaging/{receipts → internal/receipts}/_table.html.slim +2 -2
- data/app/views/renalware/messaging/{receipts → internal/receipts}/mark_as_read.js.erb +0 -0
- data/app/views/renalware/messaging/{receipts → internal/receipts}/read.html.slim +2 -1
- data/app/views/renalware/messaging/internal/receipts/sent.html.slim +7 -0
- data/app/views/renalware/messaging/{receipts → internal/receipts}/unread.html.slim +2 -1
- data/app/views/renalware/messaging/shared/_messages_type_tabs.html.slim +3 -3
- data/app/views/renalware/navigation/_main.html.slim +1 -1
- data/app/views/renalware/navigation/_patients_admin.html.slim +2 -0
- data/app/views/renalware/navigation/_user.html.slim +2 -1
- data/app/views/renalware/patients/_search_form.html.slim +12 -0
- data/app/views/renalware/patients/side_menu/_actions.html.slim +6 -2
- data/app/views/renalware/renal/profiles/_form.html.slim +0 -1
- data/app/views/renalware/renal/profiles/_mini.html.slim +1 -0
- data/app/views/renalware/{snippets/snippets → shared}/_modal_close_link.html.slim +0 -0
- data/app/views/renalware/snippets/snippets/_list.html.slim +1 -1
- data/app/views/renalware/transplants/donations/_form.html.slim +17 -16
- data/config/initializers/simple_form_foundation.rb +0 -1
- data/config/locales/renalware/admissions/requests.en.yml +12 -0
- data/config/locales/renalware/letters/contact.en.yml +3 -0
- data/config/locales/renalware/messaging/internal/messages.en.yml +33 -0
- data/config/locales/renalware/patients/search_form.en.yml +5 -0
- data/config/locales/renalware/patients/side_menu.en.yml +1 -0
- data/config/routes.rb +32 -10
- data/db/migrate/20170908155011_add_shortfall_column_to_hd_patient_statistics.rb +7 -0
- data/db/migrate/20170908160250_update_hd_overall_audit_to_version4.rb +8 -0
- data/db/migrate/20170911133224_add_type_to_messaging_messages.rb +16 -0
- data/db/migrate/20170912092135_create_letters_electronic_receipts.rb +11 -0
- data/db/migrate/20170920113628_create_admissions_requests.rb +31 -0
- data/db/seeds/default/reporting/audits.yml +1 -0
- data/db/views/reporting_hd_overall_audit_v04.sql +13 -0
- data/lib/renalware/version.rb +1 -1
- data/lib/subscription_registry.rb +1 -1
- data/spec/factories/accesses/plans.rb +2 -3
- data/spec/factories/accesses/profiles.rb +1 -2
- data/spec/factories/admissions/request_reasons.rb +8 -0
- data/spec/factories/admissions/requests.rb +9 -0
- data/spec/factories/clinical/body_compositions.rb +2 -5
- data/spec/factories/clinical/dry_weights.rb +2 -3
- data/spec/factories/clinics/clinic_visits.rb +2 -3
- data/spec/factories/directory/people.rb +1 -2
- data/spec/factories/events/events.rb +1 -2
- data/spec/factories/hd/preference_sets.rb +1 -2
- data/spec/factories/hd/profiles.rb +2 -3
- data/spec/factories/hd/sessions.rb +4 -3
- data/spec/factories/letters/electronic_receipts.rb +6 -0
- data/spec/factories/letters/letters.rb +3 -3
- data/spec/factories/medications/prescription.rb +1 -2
- data/spec/factories/medications/prescription_terminations.rb +1 -2
- data/spec/factories/messaging/internal/authors.rb +5 -0
- data/spec/factories/messaging/{message.rb → internal/messages.rb} +1 -1
- data/spec/factories/messaging/internal/receipts.rb +7 -0
- data/spec/factories/messaging/internal/recipients.rb +5 -0
- data/spec/factories/modalities/modalities.rb +1 -3
- data/spec/factories/pathology/requests/request.rb +1 -3
- data/spec/factories/patients/alerts.rb +1 -2
- data/spec/factories/patients/patients.rb +5 -3
- data/spec/factories/pd/assessments.rb +1 -2
- data/spec/factories/pd/fluid_descriptions.rb +0 -1
- data/spec/factories/pd/training_sessions.rb +1 -2
- data/spec/factories/problems/problems.rb +1 -2
- data/spec/factories/shared/accountable.rb +35 -0
- data/spec/factories/system/roles.rb +2 -4
- data/spec/factories/system/users.rb +30 -15
- data/spec/factories/transplants/donor_stage.rb +1 -2
- data/spec/factories/transplants/registration_statuses.rb +2 -4
- data/spec/support/login_macros.rb +1 -1
- metadata +108 -40
- data/app/controllers/renalware/messaging/messages_controller.rb +0 -73
- data/app/controllers/renalware/messaging/receipts_controller.rb +0 -55
- data/app/controllers/renalware/messaging/sent_messages_controller.rb +0 -22
- data/app/models/renalware/messaging/author.rb +0 -9
- data/app/models/renalware/messaging/message_factory.rb +0 -18
- data/app/models/renalware/messaging/message_form.rb +0 -34
- data/app/models/renalware/messaging/message_form_builder.rb +0 -50
- data/app/models/renalware/messaging/receipt.rb +0 -19
- data/app/models/renalware/messaging/recipient.rb +0 -10
- data/app/models/renalware/messaging/recipient_options.rb +0 -85
- data/app/models/renalware/messaging/send_message.rb +0 -22
- data/app/policies/renalware/messaging/receipt_policy.rb +0 -19
- data/app/presenters/renalware/messaging/internal_message_presenter.rb +0 -19
- data/app/presenters/renalware/messaging/receipt_presenter.rb +0 -11
- data/app/views/renalware/devise/registrations/new.html.erb +0 -46
- data/app/views/renalware/messaging/messages/_table.html.slim +0 -13
- data/app/views/renalware/messaging/messages/sent.html.slim +0 -4
- data/config/locales/renalware/messaging/messages.en.yml +0 -29
- data/spec/factories/messaging/authors.rb +0 -5
- data/spec/factories/messaging/receipt.rb +0 -7
- data/spec/factories/messaging/recipients.rb +0 -5
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require_dependency "renalware/patients"
|
|
2
|
+
|
|
3
|
+
# A form object for use behind a form (see to_partial_path) which can add a patient filter
|
|
4
|
+
# to a page. See Letters/ElectronicReceiptsController for an example.
|
|
5
|
+
# Works in concert with Patients::SearchQuery.
|
|
6
|
+
module Renalware
|
|
7
|
+
module Patients
|
|
8
|
+
class SearchForm
|
|
9
|
+
include ActiveModel::Model
|
|
10
|
+
attr_accessor :term, :url
|
|
11
|
+
|
|
12
|
+
def to_partial_path
|
|
13
|
+
"renalware/patients/search_form"
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -1,37 +1,36 @@
|
|
|
1
|
+
# A generic patient search that returns an AR relation that can used directly or merged into other
|
|
2
|
+
# queries if required in order to use the extensive patient search criteria added by the
|
|
3
|
+
# `identity_match` ransacker. See also a corresponding Patients::SearchForm form object and its
|
|
4
|
+
# partial.
|
|
5
|
+
#
|
|
6
|
+
# Example usage to find letters relating to any patient with rabbit in their surname:
|
|
7
|
+
# Letter
|
|
8
|
+
# .joins(:patients)
|
|
9
|
+
# .merge(
|
|
10
|
+
# Patients::SearchQuery.new(term: "rabbit").call
|
|
11
|
+
# )
|
|
12
|
+
#
|
|
1
13
|
module Renalware
|
|
2
14
|
module Patients
|
|
3
15
|
class SearchQuery
|
|
4
|
-
attr_reader :term
|
|
16
|
+
attr_reader :term
|
|
5
17
|
|
|
6
|
-
def initialize(term
|
|
18
|
+
def initialize(term:)
|
|
7
19
|
@term = term
|
|
8
|
-
@page = page
|
|
9
|
-
@per_page = per_page
|
|
10
20
|
end
|
|
11
21
|
|
|
12
22
|
def call
|
|
13
|
-
search
|
|
14
|
-
.result.page(page).per(per_page)
|
|
15
|
-
.select(fields)
|
|
16
|
-
.map do |patient|
|
|
17
|
-
{
|
|
18
|
-
id: patient.id,
|
|
19
|
-
label: patient.to_s(:long)
|
|
20
|
-
}
|
|
21
|
-
end
|
|
23
|
+
search.result
|
|
22
24
|
end
|
|
23
25
|
|
|
24
|
-
private
|
|
25
|
-
|
|
26
26
|
def search
|
|
27
|
-
@search ||=
|
|
28
|
-
|
|
27
|
+
@search ||= begin
|
|
28
|
+
Patient
|
|
29
|
+
.search(identity_match: term).tap do |search|
|
|
30
|
+
search.sorts = %w(family_name given_name)
|
|
31
|
+
end
|
|
29
32
|
end
|
|
30
33
|
end
|
|
31
|
-
|
|
32
|
-
def fields
|
|
33
|
-
%i(id family_name given_name nhs_number)
|
|
34
|
-
end
|
|
35
34
|
end
|
|
36
35
|
end
|
|
37
36
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require_dependency "renalware"
|
|
2
2
|
|
|
3
3
|
##
|
|
4
|
-
# Backed by a SQL view, the patient summary is principally a set of counts
|
|
4
|
+
# Backed by a SQL view, the patient summary is principally a set of counts for various entities
|
|
5
5
|
# which hang off a patient, for example prescriptions_count, problems_count etc.
|
|
6
6
|
# These can be used for instance when building the patient navigation.
|
|
7
7
|
#
|
|
@@ -9,8 +9,12 @@ module Renalware
|
|
|
9
9
|
validates_presence_of :given_name
|
|
10
10
|
validates_presence_of :family_name
|
|
11
11
|
validate :approval_with_roles, on: :update
|
|
12
|
-
validates_presence_of :professional_position,
|
|
13
|
-
|
|
12
|
+
validates_presence_of :professional_position,
|
|
13
|
+
on: :update,
|
|
14
|
+
unless: :skip_validation
|
|
15
|
+
validates_presence_of :signature,
|
|
16
|
+
on: :update,
|
|
17
|
+
unless: :skip_validation
|
|
14
18
|
|
|
15
19
|
scope :unapproved, -> { where(approved: [nil, false]) }
|
|
16
20
|
scope :inactive, lambda {
|
|
@@ -22,6 +26,10 @@ module Renalware
|
|
|
22
26
|
# Non-persistent attribute to signify an update by an admin (bypassing some validations)
|
|
23
27
|
attr_accessor :super_admin_update
|
|
24
28
|
|
|
29
|
+
def skip_validation
|
|
30
|
+
super_admin_update || reset_password_token
|
|
31
|
+
end
|
|
32
|
+
|
|
25
33
|
def self.policy_class
|
|
26
34
|
UserPolicy
|
|
27
35
|
end
|
|
@@ -38,6 +46,14 @@ module Renalware
|
|
|
38
46
|
@role_names ||= roles.pluck(:name)
|
|
39
47
|
end
|
|
40
48
|
|
|
49
|
+
# Official name for use when displaying e.g. on a letter. For example:
|
|
50
|
+
# Dr Isaac Newton (Consultant Gravitationalist)
|
|
51
|
+
def professional_signature
|
|
52
|
+
signed = signature || full_name
|
|
53
|
+
signed += " (#{professional_position})" if professional_position?
|
|
54
|
+
signed
|
|
55
|
+
end
|
|
56
|
+
|
|
41
57
|
private
|
|
42
58
|
|
|
43
59
|
def approval_with_roles
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
require_dependency "renalware/letters/letter_policy"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module Letters
|
|
5
|
+
class ElectronicReceiptPolicy < BasePolicy
|
|
6
|
+
def mark_as_read?
|
|
7
|
+
!record.read? && record.letter.approved?
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def unread?
|
|
11
|
+
index?
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def read?
|
|
15
|
+
index?
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def sent?
|
|
19
|
+
index?
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
require_dependency "renalware/messaging"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module Messaging
|
|
5
|
+
module Internal
|
|
6
|
+
class ReceiptPolicy < BasePolicy
|
|
7
|
+
def mark_as_read?
|
|
8
|
+
update?
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def unread?
|
|
12
|
+
index?
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def read?
|
|
16
|
+
index?
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def sent?
|
|
20
|
+
index?
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -33,8 +33,15 @@ module Renalware
|
|
|
33
33
|
|
|
34
34
|
def unread_messages_receipts
|
|
35
35
|
@unread_messages_receipts ||= begin
|
|
36
|
-
receipts = Messaging.cast_recipient(user).receipts.unread
|
|
37
|
-
CollectionPresenter.new(receipts, Messaging::ReceiptPresenter)
|
|
36
|
+
receipts = Messaging::Internal.cast_recipient(user).receipts.unread
|
|
37
|
+
CollectionPresenter.new(receipts, Messaging::Internal::ReceiptPresenter)
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def unread_electronic_ccs
|
|
42
|
+
@unread_electronic_ccs ||= begin
|
|
43
|
+
receipts = Letters::ElectronicReceipt.unread.for_recipient(user.id).ordered
|
|
44
|
+
CollectionPresenter.new(receipts, Letters::ElectronicReceiptPresenter)
|
|
38
45
|
end
|
|
39
46
|
end
|
|
40
47
|
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
require_dependency "renalware/letters"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module Letters
|
|
5
|
+
class ElectronicReceiptPresenter < DumbDelegator
|
|
6
|
+
def html_identifier
|
|
7
|
+
"electronic-receipt-#{id}"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def html_preview_identifier
|
|
11
|
+
"electronic-receipt-preview-#{id}"
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -55,6 +55,7 @@ module Renalware
|
|
|
55
55
|
# to sorting by drug name
|
|
56
56
|
def current_prescriptions
|
|
57
57
|
@current_prescriptions ||= begin
|
|
58
|
+
# TODO: maybe use #sort_by(:prescribed_on) here
|
|
58
59
|
execute_prescriptions_query(patient.prescriptions.current)
|
|
59
60
|
.sort{ |presc1, presc2| presc2.prescribed_on <=> presc1.prescribed_on }
|
|
60
61
|
end
|
|
@@ -81,6 +82,7 @@ module Renalware
|
|
|
81
82
|
# to sorting by drug name
|
|
82
83
|
def esa_prescriptions
|
|
83
84
|
@esa_prescriptions ||= begin
|
|
85
|
+
# TODO: maybe use #sort_by(:prescribed_on) here
|
|
84
86
|
execute_prescriptions_query(
|
|
85
87
|
patient.prescriptions.having_drug_of_type("esa")
|
|
86
88
|
).sort{ |presc1, presc2| presc2.prescribed_on <=> presc1.prescribed_on }
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
require_dependency "renalware/messaging"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module Messaging
|
|
5
|
+
module Internal
|
|
6
|
+
class MessagePresenter < SimpleDelegator
|
|
7
|
+
def age_in_days
|
|
8
|
+
(Time.zone.now.to_date - sent_at.to_date).to_i
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def html_identifier
|
|
12
|
+
"message-#{id}"
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def html_preview_identifier
|
|
16
|
+
"message-preview-#{id}"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
require_dependency "renalware/messaging"
|
|
2
|
+
|
|
3
|
+
module Renalware
|
|
4
|
+
module Messaging
|
|
5
|
+
module Internal
|
|
6
|
+
class ReceiptPresenter < SimpleDelegator
|
|
7
|
+
def message
|
|
8
|
+
@message ||= Renalware::Messaging::Internal::MessagePresenter.new(super)
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -3,6 +3,10 @@ require_dependency "renalware/pathology"
|
|
|
3
3
|
module Renalware
|
|
4
4
|
module Pathology
|
|
5
5
|
class ObservationPresenter < SimpleDelegator
|
|
6
|
+
delegate :name, to: :description, prefix: true, allow_nil: true
|
|
7
|
+
delegate :measurement_unit, to: :description
|
|
8
|
+
delegate :name, to: :measurement_unit, prefix: true
|
|
9
|
+
|
|
6
10
|
def html_class
|
|
7
11
|
description.to_s.downcase
|
|
8
12
|
end
|
|
@@ -5,6 +5,7 @@ module Renalware
|
|
|
5
5
|
class PatientPresenter < SimpleDelegator
|
|
6
6
|
delegate :allergies, to: :clinical_patient
|
|
7
7
|
delegate :clinic_visits, to: :clinics_patient
|
|
8
|
+
delegate :observation_requests, to: :pathology_patient
|
|
8
9
|
|
|
9
10
|
def smoking_history
|
|
10
11
|
@smoking_history ||= document.history&.smoking&.upcase
|
|
@@ -34,6 +35,10 @@ module Renalware
|
|
|
34
35
|
def letters_patient
|
|
35
36
|
@letters_patient ||= Renalware::Letters.cast_patient(__getobj__)
|
|
36
37
|
end
|
|
38
|
+
|
|
39
|
+
def pathology_patient
|
|
40
|
+
@pathology_patient ||= Renalware::Pathology.cast_patient(__getobj__)
|
|
41
|
+
end
|
|
37
42
|
end
|
|
38
43
|
end
|
|
39
44
|
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/ This partial is pulled in when the whole page renders, and creates the link and
|
|
2
|
+
/ associated modal dialog wiring for creating an admission request (TCI).
|
|
3
|
+
- url = new_admissions_request_path(patient_id: patient, format: :html)
|
|
4
|
+
|
|
5
|
+
/ Link to launch the modal dialog
|
|
6
|
+
=link_to(url,
|
|
7
|
+
id: "create-admissions-request",
|
|
8
|
+
data: { "reveal-id" => "admissions-request-modal", "reveal-ajax" => "true" }) do
|
|
9
|
+
i.fa.fa-link-annotation.fa-hand-o-right
|
|
10
|
+
= link_text
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
.modal
|
|
2
|
+
.modal__header
|
|
3
|
+
h2= "#{controller.action_name.capitalize} Request Admission (TCI)"
|
|
4
|
+
= render "renalware/shared/modal_close_link"
|
|
5
|
+
|
|
6
|
+
.modal__body
|
|
7
|
+
= render "renalware/shared/errors", model: request
|
|
8
|
+
|
|
9
|
+
= simple_form_for(request,
|
|
10
|
+
remote: true,
|
|
11
|
+
wrapper: :horizontal_form) do |f|
|
|
12
|
+
|
|
13
|
+
.row.admissions-request-patient
|
|
14
|
+
.small-12.medium-4.large-3.columns
|
|
15
|
+
label.right.inline Patient
|
|
16
|
+
.small-12.medium-8.large-9.columns
|
|
17
|
+
strong= request.patient.to_s(:long)
|
|
18
|
+
|
|
19
|
+
= f.input :patient_id, as: :hidden
|
|
20
|
+
= f.input :reason_id, collection: reasons, wrapper: :horizontal_medium
|
|
21
|
+
= f.input :priority, wrapper: :horizontal_small
|
|
22
|
+
= f.input :hospital_unit_id, collection: hospital_units, wrapper: :horizontal_medium
|
|
23
|
+
= f.input :notes, as: :text, wrapper: :horizontal_large, input_html: { rows: 5 }
|
|
24
|
+
= f.submit class: :button
|
|
25
|
+
span= " or "
|
|
26
|
+
=link_to "Cancel",
|
|
27
|
+
"#",
|
|
28
|
+
"aria-label" => "Close",
|
|
29
|
+
class: "reveal-modal-close"
|
|
30
|
+
|
|
31
|
+
.modal__footer
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
- patient = request.patient
|
|
2
|
+
- unit = Renalware::Hospitals::Unit.find_by(id: request.hospital_unit_id)
|
|
3
|
+
- editing_history = "Created #{l(request.created_at)} by #{request.created_by}\n"\
|
|
4
|
+
"Updated #{l(request.updated_at)} by #{request.updated_by}"
|
|
5
|
+
= content_tag_for(:tr,
|
|
6
|
+
request,
|
|
7
|
+
class: "sortable priority-#{request.priority}") do
|
|
8
|
+
td(class="sortable-position-for-model-id-#{request.id}")= request.position
|
|
9
|
+
td.priority
|
|
10
|
+
span= request.priority.text
|
|
11
|
+
td= request.reason.description
|
|
12
|
+
td= default_patient_link(patient)
|
|
13
|
+
td= patient.nhs_number
|
|
14
|
+
td= patient.hospital_identifiers
|
|
15
|
+
td= unit&.name
|
|
16
|
+
td.col-width-medium-with-ellipsis(title=request.notes)
|
|
17
|
+
= request.notes
|
|
18
|
+
td(title=editing_history)= l(request.created_at)
|
|
19
|
+
td
|
|
20
|
+
= link_to admissions_request_path(request),
|
|
21
|
+
remote: true,
|
|
22
|
+
method: :delete,
|
|
23
|
+
class: "remove",
|
|
24
|
+
data: { confirm: "Are you sure you want to remove this item?" } do
|
|
25
|
+
i.fa.fa-trash.fa-link-annotation
|
|
26
|
+
| |
|
|
27
|
+
= link_to "Edit",
|
|
28
|
+
edit_admissions_request_path(request, format: :html),
|
|
29
|
+
remote: true,
|
|
30
|
+
method: :get,
|
|
31
|
+
data: { "reveal-id" => "admissions-request-modal", "reveal-ajax" => "true" }
|
|
32
|
+
td.handle
|
|
33
|
+
i.fa.fa-reorder
|
|
34
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
table.admissions_requests
|
|
2
|
+
thead
|
|
3
|
+
th Rank
|
|
4
|
+
th Priority
|
|
5
|
+
th Reason
|
|
6
|
+
th Patient
|
|
7
|
+
th.col-width-nhs-no NHS Number
|
|
8
|
+
th Hospital Nos.
|
|
9
|
+
th Location
|
|
10
|
+
th Notes
|
|
11
|
+
th.col-width-date-time Created
|
|
12
|
+
th.col-width-small
|
|
13
|
+
th
|
|
14
|
+
= content_tag(:tbody,
|
|
15
|
+
class: "sortables",
|
|
16
|
+
data: { rel: sort_admissions_requests_path }) do
|
|
17
|
+
= render requests
|
|
18
|
+
|
|
19
|
+
= render "modal_dialog_placeholder"
|