renalware-core 2.0.111 → 2.0.112
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +9 -0
- data/app/assets/javascripts/renalware/application.js.erb +7 -8
- data/app/assets/javascripts/renalware/charting/charting.js.erb +4 -0
- data/app/assets/javascripts/renalware/dialogs.js.erb +0 -11
- data/app/assets/javascripts/renalware/hd.js +59 -9
- data/app/assets/stylesheets/renalware/application.scss +2 -3
- data/app/assets/stylesheets/renalware/modules/_hd.scss +19 -0
- data/app/assets/stylesheets/renalware/modules/_patients.scss +7 -0
- data/app/assets/stylesheets/renalware/print/pathology_request_forms.scss +26 -0
- data/app/assets/stylesheets/renalware/protocol_pdf.scss +9 -4
- data/app/controllers/renalware/hd/mdm_patients_controller.rb +17 -6
- data/app/controllers/renalware/hd/protocols_controller.rb +22 -31
- data/app/controllers/renalware/hd/session_forms/batches_controller.rb +82 -0
- data/app/controllers/renalware/pathology/requests/requests_controller.rb +20 -6
- data/app/controllers/renalware/surveys/dashboards_controller.rb +24 -0
- data/app/jobs/renalware/hd/session_forms/batch_print_job.rb +40 -0
- data/app/models/concerns/renalware/pdf_compilation.rb +60 -0
- data/app/models/renalware/clinical/allergy_status_form.rb +1 -1
- data/app/models/renalware/clinical/delete_allergy.rb +1 -1
- data/app/models/renalware/clinics/appointment_query.rb +1 -5
- data/app/models/renalware/hd.rb +6 -0
- data/app/models/renalware/hd/patient_listener.rb +1 -1
- data/app/models/renalware/hd/session_forms/batch.rb +26 -0
- data/app/models/renalware/hd/session_forms/batch_compile_pdfs.rb +86 -0
- data/app/models/renalware/hd/session_forms/batch_item.rb +15 -0
- data/app/models/renalware/hd/session_forms/form.rb +16 -0
- data/app/models/renalware/hd/session_forms/pdf_renderer.rb +74 -0
- data/app/models/renalware/letters/batch.rb +2 -0
- data/app/models/renalware/letters/printing/batch_compile_pdfs.rb +0 -3
- data/app/models/renalware/medications/patient_listener.rb +1 -1
- data/app/models/renalware/pathology/ordered_patient_query.rb +1 -1
- data/app/models/renalware/pathology/request_for_patient_request_description_query.rb +1 -1
- data/app/models/renalware/pd/apd/non_tidal_regime_calculations.rb +1 -1
- data/app/models/renalware/pd/apd/tidal_regime_calculations.rb +1 -1
- data/app/models/renalware/snippets/snippet_query.rb +1 -1
- data/app/models/renalware/surveys.rb +9 -0
- data/app/models/renalware/surveys/eq5d_pivoted_response.rb +11 -0
- data/app/models/renalware/surveys/eq5d_summary_part.rb +51 -0
- data/app/models/renalware/surveys/pos_s_pivoted_response.rb +11 -0
- data/app/models/renalware/surveys/pos_s_summary_part.rb +51 -0
- data/app/models/renalware/surveys/question.rb +22 -0
- data/app/models/renalware/surveys/response.rb +28 -0
- data/app/models/renalware/surveys/survey.rb +17 -0
- data/app/models/renalware/ukrdc.rb +3 -0
- data/app/models/renalware/ukrdc/incoming/file_list.rb +21 -0
- data/app/models/renalware/ukrdc/incoming/import_survey.rb +57 -0
- data/app/models/renalware/ukrdc/incoming/import_surveys.rb +77 -0
- data/app/models/renalware/ukrdc/incoming/paths.rb +30 -0
- data/app/models/renalware/ukrdc/incoming/xml_document.rb +68 -0
- data/app/models/renalware/ukrdc/transmission_log.rb +14 -3
- data/app/policies/renalware/hd/session_forms/batch_policy.rb +13 -0
- data/app/policies/renalware/surveys/survey_policy.rb +10 -0
- data/app/presenters/renalware/hd/session_presenter.rb +1 -1
- data/app/views/renalware/clinics/appointments/index.html.slim +22 -11
- data/app/views/renalware/hd/dashboards/_page_actions.html.slim +1 -1
- data/app/views/renalware/hd/diary_slots/_form.html.slim +0 -3
- data/app/views/renalware/hd/mdm_patients/_filters.html.slim +11 -0
- data/app/views/renalware/hd/mdm_patients/_page_actions.html.slim +0 -0
- data/app/views/renalware/hd/mdm_patients/index.html.slim +9 -1
- data/app/views/renalware/hd/protocols/{show.pdf.slim → _protocol.pdf.slim} +1 -7
- data/app/views/renalware/hd/protocols/index.pdf.slim +4 -0
- data/app/views/renalware/hd/session_forms/batches/_create.html.slim +25 -0
- data/app/views/renalware/hd/session_forms/batches/create.js.erb +3 -0
- data/app/views/renalware/hd/sessions/_row.html.slim +1 -1
- data/app/views/renalware/hd/sessions/_thead.html.slim +1 -1
- data/app/views/renalware/pathology/historical_observation_results/_table.html.slim +1 -1
- data/app/views/renalware/pathology/recent_observation_results/_table.html.slim +1 -1
- data/app/views/renalware/pathology/requests/requests/create.pdf.slim +2 -1
- data/app/views/renalware/pathology/requests/requests/new.html.slim +18 -13
- data/app/views/renalware/pathology/requests/requests/request_form/_crs.pdf.slim +1 -0
- data/app/views/renalware/pathology/requests/requests/request_form/_crs_form.html.slim +46 -45
- data/app/views/renalware/pathology/requests/requests/request_form/_manual_form_global.html.slim +9 -8
- data/app/views/renalware/pathology/requests/requests/request_form/_manual_form_patient.html.slim +9 -8
- data/app/views/renalware/pathology/requests/requests/show.pdf.slim +2 -1
- data/app/views/renalware/patients/side_menu/_general.html.slim +4 -0
- data/app/views/renalware/surveys/_eq5d_summary_part.html.slim +26 -0
- data/app/views/renalware/surveys/_pos_s_summary_part.html.slim +26 -0
- data/app/views/renalware/surveys/dashboards/show.html.slim +32 -0
- data/config/initializers/chartkick.rb +6 -0
- data/config/initializers/core_extensions.rb +4 -4
- data/config/initializers/inflections.rb +3 -0
- data/config/locales/renalware/patients/side_menu.en.yml +1 -0
- data/config/routes/hd.rb +5 -1
- data/config/routes/patients.rb +4 -0
- data/db/migrate/20190927124840_create_hd_session_form_batches.rb +16 -0
- data/db/migrate/20190927130911_create_hd_session_form_batch_items.rb +17 -0
- data/db/migrate/20191008010839_create_surveys.rb +70 -0
- data/db/migrate/20191008024636_create_eq5d_views.rb +8 -0
- data/db/migrate/20191008030154_add_validation_regex_to_patient_survey_questions.rb +7 -0
- data/db/migrate/20191008045159_allow_null_patient_in_ukrdc_transmission_logs.rb +8 -0
- data/db/seeds/default/patients/seeds.rb +2 -0
- data/db/seeds/default/patients/surveys/eq5d_5l.rb +22 -0
- data/db/seeds/default/patients/surveys/eq5d_5l_questions.csv +7 -0
- data/db/seeds/default/patients/surveys/pos_s.rb +22 -0
- data/db/seeds/default/patients/surveys/pos_s_questions.csv +23 -0
- data/db/views/survey_eq5d_pivoted_responses_v01.sql +41 -0
- data/db/views/survey_pos_s_pivoted_responses_v01.sql +36 -0
- data/lib/core_extensions/active_record/migration_helpers.rb +1 -1
- data/lib/core_extensions/active_support/duration.rb +1 -1
- data/lib/core_extensions/scenic.rb +1 -1
- data/lib/renalware/engine.rb +4 -4
- data/lib/renalware/version.rb +1 -1
- data/lib/tasks/ukrdc.rake +9 -0
- data/spec/factories/patients/surveys.rb +24 -0
- data/spec/support/ukrdc_helpers.rb +16 -0
- metadata +98 -59
- data/app/views/renalware/letters/batches/show.html.slim +0 -7
- data/app/views/renalware/pathology/requests/requests/_pdf_header.html.slim +0 -13
- data/vendor/assets/javascripts/renalware/masonry.min.js +0 -9
- data/vendor/assets/javascripts/renalware/print.min.js +0 -1
- data/vendor/assets/stylesheets/renalware/balloon.css +0 -383
- data/vendor/assets/stylesheets/renalware/print.min.css +0 -1
- data/vendor/assets/stylesheets/renalware/select2/css/select2.css +0 -431
- data/vendor/assets/stylesheets/renalware/select2/css/select2.min.css +0 -1
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/ukrdc"
|
4
|
+
require "attr_extras"
|
5
|
+
|
6
|
+
module Renalware
|
7
|
+
module UKRDC
|
8
|
+
module Incoming
|
9
|
+
class ImportSurveys
|
10
|
+
pattr_initialize [:paths, :logger]
|
11
|
+
attr_reader :batch_uuid
|
12
|
+
|
13
|
+
def initialize(paths: nil, logger: nil)
|
14
|
+
@paths = paths || Renalware::UKRDC::Incoming::Paths.new
|
15
|
+
@logger = logger || Rails.logger
|
16
|
+
@batch_uuid = SecureRandom.uuid # to group logging output
|
17
|
+
end
|
18
|
+
|
19
|
+
def call
|
20
|
+
Incoming::FileList.new(paths: paths).each_file do |filepath|
|
21
|
+
import_surveys_from_file(filepath)
|
22
|
+
end
|
23
|
+
rescue StandardError => e
|
24
|
+
Renalware::Engine.exception_notifier.notify(e)
|
25
|
+
raise e
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
# Import all surverys (they will be for the same patient) in the XML file.
|
31
|
+
# Note that #with_logging yields a block that will catch and save any error to
|
32
|
+
# ukrdc_transmission_logs
|
33
|
+
# rubocop:disable Lint/HandleExceptions, Metrics/AbcSize
|
34
|
+
def import_surveys_from_file(file)
|
35
|
+
# Important to create the log before we do anything that might cause an error
|
36
|
+
# eg parse the xml etc.
|
37
|
+
TransmissionLog.with_logging(nil, batch_uuid, log_options(file)) do |log|
|
38
|
+
doc = XmlDocument.new(file)
|
39
|
+
patient = find_patient(doc.nhs_number)
|
40
|
+
log.update!(patient_id: patient.id)
|
41
|
+
doc.surveys.each do |survey_hash|
|
42
|
+
import_survey(survey_hash, patient)
|
43
|
+
end
|
44
|
+
log.update!(status: :imported)
|
45
|
+
end
|
46
|
+
rescue StandardError
|
47
|
+
# noop - errors have been logged inside with_logging
|
48
|
+
ensure
|
49
|
+
FileUtils.mv file, paths.archive.join(file.basename)
|
50
|
+
end
|
51
|
+
# rubocop:enable Lint/HandleExceptions, Metrics/AbcSize
|
52
|
+
|
53
|
+
def import_survey(survey_hash, patient)
|
54
|
+
ImportSurvey.new(
|
55
|
+
patient: patient,
|
56
|
+
survey_hash: survey_hash
|
57
|
+
).call
|
58
|
+
end
|
59
|
+
|
60
|
+
def find_patient(nhs_number)
|
61
|
+
Renalware::Patient.find_by!(nhs_number: nhs_number)
|
62
|
+
end
|
63
|
+
|
64
|
+
# rubocop:disable Style/RescueModifier
|
65
|
+
def log_options(file)
|
66
|
+
{
|
67
|
+
status: :undefined,
|
68
|
+
file_path: file.to_s,
|
69
|
+
direction: :in,
|
70
|
+
payload: (File.read(file) rescue nil)
|
71
|
+
}
|
72
|
+
end
|
73
|
+
# rubocop:enable Style/RescueModifier
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/ukrdc"
|
4
|
+
|
5
|
+
module Renalware
|
6
|
+
module UKRDC
|
7
|
+
module Incoming
|
8
|
+
class Paths
|
9
|
+
def initialize
|
10
|
+
FileUtils.mkdir_p incoming
|
11
|
+
FileUtils.mkdir_p archive
|
12
|
+
end
|
13
|
+
|
14
|
+
def incoming
|
15
|
+
@incoming ||= working_path.join("incoming")
|
16
|
+
end
|
17
|
+
|
18
|
+
def archive
|
19
|
+
@archive ||= working_path.join("archive", "incoming")
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def working_path
|
25
|
+
Pathname(Renalware.config.ukrdc_working_path)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/ukrdc"
|
4
|
+
require "attr_extras"
|
5
|
+
|
6
|
+
module Renalware
|
7
|
+
module UKRDC
|
8
|
+
module Incoming
|
9
|
+
# Encapsulates the structure of the UKRDC XML Document.
|
10
|
+
# Assumes one patient per file.
|
11
|
+
class XmlDocument
|
12
|
+
XPATHS = {
|
13
|
+
dob: "string(Patient[1]/BirthTime)",
|
14
|
+
family_name: "string(Patient[1]/Names[1]/Name/Family)",
|
15
|
+
nhs_number: <<-XPATH.squish
|
16
|
+
string(
|
17
|
+
Patient[1]/
|
18
|
+
PatientNumbers/
|
19
|
+
PatientNumber[Organization[text()='NHS']][NumberType[text()='MRN']][1]/
|
20
|
+
Number
|
21
|
+
)
|
22
|
+
XPATH
|
23
|
+
}.freeze
|
24
|
+
|
25
|
+
attr_reader :root
|
26
|
+
|
27
|
+
def initialize(file)
|
28
|
+
xml_document = File.open(file) { |f| Nokogiri::XML(f) }
|
29
|
+
@root = xml_document.root
|
30
|
+
end
|
31
|
+
|
32
|
+
# Accessing eg XmlDocument.new(file).nhs_number will search the document with looked-up
|
33
|
+
# entry in the XPATHS constant, to save us having to write attributes for the things we
|
34
|
+
# need.
|
35
|
+
def method_missing(method_name, *_args, &_block)
|
36
|
+
xpath = XPATHS[method_name]
|
37
|
+
return root.xpath(xpath) if xpath
|
38
|
+
|
39
|
+
super
|
40
|
+
end
|
41
|
+
|
42
|
+
def respond_to_missing?(method_name, *_args)
|
43
|
+
XPATHS.key?(method_name)
|
44
|
+
end
|
45
|
+
|
46
|
+
# Turn the surveys XML into a hash becuase it is easier to consume
|
47
|
+
def surveys
|
48
|
+
root.xpath("Surveys/Survey").each_with_object([]) do |survey_node, arr|
|
49
|
+
hash = {}
|
50
|
+
hash[:code] = survey_node.xpath("string(SurveyType/Code)")
|
51
|
+
hash[:time] = survey_node.xpath("string(SurveyTime)")
|
52
|
+
hash[:responses] = question_hash_from(survey_node)
|
53
|
+
arr << hash
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def question_hash_from(survey_node)
|
58
|
+
question_nodes = survey_node.xpath("Questions/Question")
|
59
|
+
question_nodes.each_with_object({}) do |question_node, responses|
|
60
|
+
code = question_node.xpath("string(QuestionType/Code)")
|
61
|
+
response = question_node.xpath("string(Response)")
|
62
|
+
responses[code] = response
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -8,11 +8,22 @@ module Renalware
|
|
8
8
|
validates :sent_at, presence: true
|
9
9
|
validates :status, presence: true
|
10
10
|
belongs_to :patient, class_name: "Renalware::Patient"
|
11
|
-
enum status: {
|
11
|
+
enum status: {
|
12
|
+
undefined: 0,
|
13
|
+
error: 1,
|
14
|
+
unsent_no_change_since_last_send: 2,
|
15
|
+
sent: 3,
|
16
|
+
imported: 4
|
17
|
+
}
|
18
|
+
enum direction: [:out, :in]
|
12
19
|
scope :ordered, -> { order(sent_at: :asc) }
|
13
20
|
|
14
|
-
def self.with_logging(patient, request_uuid)
|
15
|
-
log = new(
|
21
|
+
def self.with_logging(patient, request_uuid, **options)
|
22
|
+
log = new(
|
23
|
+
patient: patient,
|
24
|
+
sent_at: Time.zone.now,
|
25
|
+
request_uuid: request_uuid,
|
26
|
+
**options)
|
16
27
|
yield log if block_given?
|
17
28
|
log.save!
|
18
29
|
rescue StandardError => e
|
@@ -6,7 +6,7 @@
|
|
6
6
|
method: :get do |f|
|
7
7
|
.row
|
8
8
|
.medium-3.large-2.columns
|
9
|
-
= f.input :
|
9
|
+
= f.input :starts_on_eq, as: :date_picker, label: "Date"
|
10
10
|
.medium-3.large-3.columns
|
11
11
|
= f.input :clinic_id_eq, collection: clinics, label: "Clinic"
|
12
12
|
.medium-3.large-3.columns
|
@@ -40,21 +40,32 @@
|
|
40
40
|
|
|
41
41
|
= link_to "(Uncheck all)", "#", id: "uncheck_all_appointments_link"
|
42
42
|
th.col-width-medium-ish
|
43
|
-
th.col-width-date
|
44
|
-
= sort_link([:renalware, query], :starts_at, "Date", default_order: :asc)
|
45
|
-
th.col-width-time
|
46
|
-
= sort_link([:renalware, query], :start_time, "Time", default_order: :asc)
|
43
|
+
th.col-width-date-time
|
44
|
+
= sort_link([:renalware, query], :starts_at, "Date and Time", default_order: :asc)
|
47
45
|
th.col-width-medium
|
48
|
-
= sort_link([:renalware, query],
|
46
|
+
= sort_link([:renalware, query],
|
47
|
+
:patient_family_name,
|
48
|
+
[:patient_family_name, "starts_at asc"],
|
49
|
+
"Patient",
|
50
|
+
default_order: :asc)
|
49
51
|
th.col-width-tiny Sex
|
50
52
|
th.col-width-tiny Age
|
51
|
-
th.col-width-
|
53
|
+
th.col-width-medium
|
52
54
|
= sort_link([:renalware, query],
|
53
55
|
:patient_current_modality_description_name,
|
56
|
+
[:patient_current_modality_description_name, "starts_at asc"],
|
54
57
|
"Modality",
|
55
58
|
default_order: :asc)
|
56
|
-
th= sort_link([:renalware, query],
|
57
|
-
|
59
|
+
th= sort_link([:renalware, query],
|
60
|
+
:clinic_name,
|
61
|
+
[:clinic_name, "starts_at asc"],
|
62
|
+
"Clinic",
|
63
|
+
default_order: :asc)
|
64
|
+
th= sort_link([:renalware, query],
|
65
|
+
:consultant_name,
|
66
|
+
[:consultant_name, "starts_at asc"],
|
67
|
+
"Consultant",
|
68
|
+
default_order: :asc)
|
58
69
|
th.show-for-large-up Outcome notes
|
59
70
|
th.show-for-large-up DNA notes
|
60
71
|
|
@@ -77,8 +88,8 @@
|
|
77
88
|
i.fas.fa-pencil-alt
|
78
89
|
= " Create Clinic Visit"
|
79
90
|
|
80
|
-
td= I18n.l appointment.
|
81
|
-
td= appointment.start_time
|
91
|
+
td= I18n.l appointment.starts_at
|
92
|
+
/td= appointment.start_time
|
82
93
|
td= default_patient_link(appointment.patient)
|
83
94
|
td= appointment.patient.sex.code
|
84
95
|
td= appointment.patient.age
|
@@ -1,7 +1,7 @@
|
|
1
1
|
= link_to(patient_hd_mdm_path(patient), class: "button with-icon secondary") do
|
2
2
|
i.fas.fa-users
|
3
3
|
= t(".mdm")
|
4
|
-
= link_to(patient_hd_protocol_path(patient), class: "button with-icon secondary") do
|
4
|
+
= link_to(patient_hd_protocol_path(patient), class: "button with-icon secondary", target: "_blank") do
|
5
5
|
i.fas.fa-print
|
6
6
|
= t(".protocol")
|
7
7
|
a.button.dropdown.with-icon(href="#"
|
@@ -87,9 +87,6 @@ javascript:
|
|
87
87
|
|
88
88
|
function resizeSelect2ToFitModalWidth(container) {
|
89
89
|
$('.select2', container).css('width', "100%");
|
90
|
-
$('#tabs').on('tabsactivate', function(event, ui) {
|
91
|
-
$('.select2').css('width', "100%");
|
92
|
-
});
|
93
90
|
}
|
94
91
|
|
95
92
|
function refreshSelect2s(change_type) {
|
@@ -28,3 +28,14 @@
|
|
28
28
|
= f.submit t("helpers.submit.filter"), class: "button", name: nil
|
29
29
|
span= " or "
|
30
30
|
= link_to t("helpers.reset"), filter_form.url
|
31
|
+
|
32
|
+
- if Renalware.config.batch_printing_enabled
|
33
|
+
= simple_form_for batch_print_form,
|
34
|
+
as: :batch,
|
35
|
+
url: hd_session_forms_batches_path,
|
36
|
+
method: :post,
|
37
|
+
remote: true do |f|
|
38
|
+
= f.input :patient_ids, as: :hidden
|
39
|
+
= f.submit "Batch Print #{presenter.patients.total_count} HD Session Forms",
|
40
|
+
class: "button",
|
41
|
+
disabled: presenter.patients.none?
|
File without changes
|
@@ -1,5 +1,11 @@
|
|
1
|
+
/ = content_for(:actions) do
|
2
|
+
/ = render "page_actions", presenter: presenter, form: filter_form
|
3
|
+
|
1
4
|
= content_for(:filters) do
|
2
|
-
=
|
5
|
+
= render "filters",
|
6
|
+
presenter: presenter,
|
7
|
+
filter_form: filter_form,
|
8
|
+
batch_print_form: batch_print_form
|
3
9
|
|
4
10
|
= content_for(:tabs) do
|
5
11
|
= render_if_exists "tabs", presenter: presenter
|
@@ -7,3 +13,5 @@
|
|
7
13
|
= within_admin_layout(title: presenter.page_title)
|
8
14
|
= render "table", presenter: presenter
|
9
15
|
= paginate presenter.patients
|
16
|
+
|
17
|
+
#hd-session-form-batch-print-modal.reveal-modal.small(data-reveal)
|
@@ -37,15 +37,9 @@
|
|
37
37
|
= render "renalware/hd/sessions/thead"
|
38
38
|
tbody
|
39
39
|
- 1..3.times do
|
40
|
-
= render "renalware/hd/sessions/empty_row"
|
40
|
+
= render "renalware/hd/sessions/empty_row"
|
41
41
|
- protocol.sessions.each_with_index do |session, index|
|
42
42
|
- stripe_class = index % 2 == 0 ? "even" : "odd"
|
43
43
|
= render "renalware/hd/sessions/row",
|
44
44
|
session: session,
|
45
45
|
stripe_class: stripe_class
|
46
|
-
|
47
|
-
.page-break
|
48
|
-
|
49
|
-
- protocol.with_format("html") do
|
50
|
-
.protocol
|
51
|
-
h2 Acute observations
|
@@ -0,0 +1,25 @@
|
|
1
|
+
.modal
|
2
|
+
.modal__header
|
3
|
+
h1= "Compiling #{batch.batch_items_count} HD Session Forms"
|
4
|
+
.percent_complete
|
5
|
+
.modal__body
|
6
|
+
.content
|
7
|
+
.batch_results_container
|
8
|
+
.preparing
|
9
|
+
= image_tag("renalware/loading-gears-animation.gif", height: "116")
|
10
|
+
|
11
|
+
.generated-batch-print-pdf-container(style="display:none")
|
12
|
+
= link_to hd_session_forms_batch_path(batch, format: :pdf),
|
13
|
+
target: "_blank",
|
14
|
+
class: "print-batch-letter" do
|
15
|
+
i.far.fa-check-circle
|
16
|
+
| Open PDF in a new tab
|
17
|
+
|
18
|
+
.modal__footer
|
19
|
+
.left
|
20
|
+
= "##{batch.id}"
|
21
|
+
.right
|
22
|
+
= link_to "Cancel",
|
23
|
+
"#",
|
24
|
+
"aria-label" => "Close",
|
25
|
+
class: "reveal-modal-close cancel-link"
|
@@ -5,7 +5,7 @@ tr.hd-session-row(class=[session.state, stripe_class])
|
|
5
5
|
data: { behaviour: "toggler" })
|
6
6
|
= pipe_separator
|
7
7
|
= session.edit_or_view_url
|
8
|
-
td.
|
8
|
+
td.col-width-date(rowspan=2)= session.performed_on
|
9
9
|
td= session.hospital_unit_unit_code
|
10
10
|
|
11
11
|
td= session.start_time
|
@@ -4,7 +4,7 @@ thead
|
|
4
4
|
th.col-width-date(rowspan=3 valign="top")= t(".date")
|
5
5
|
th.col-width-small= t(".site")
|
6
6
|
th.col-width-time.text-center= t(".time")
|
7
|
-
th.col-width-
|
7
|
+
th.col-width-time(rowspan=3)= t(".duration")
|
8
8
|
th.col-width-tiny= t(".weight")
|
9
9
|
th.col-width-tiny= t(".pulse")
|
10
10
|
th.col-width-tiny= t(".temperature")
|
@@ -14,7 +14,7 @@ table#observations.column_hover
|
|
14
14
|
- table.observation_descriptions.each do |desc|
|
15
15
|
- code = desc.code
|
16
16
|
- if row.comment_for(code).present?
|
17
|
-
td(class=code.downcase
|
17
|
+
td(class=code.downcase aria-label=row.comment_for(code) data-balloon-pos="up")
|
18
18
|
.triangle-top-right
|
19
19
|
= row.result_for(code)
|
20
20
|
- else
|