renalware-core 2.0.69 → 2.0.70
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/controllers/renalware/events/events_controller.rb +61 -22
- data/app/controllers/renalware/session_timeout_controller.rb +1 -0
- data/app/helpers/renalware/application_helper.rb +1 -1
- data/app/jobs/renalware/events/save_pdf_event_to_file_job.rb +30 -0
- data/app/models/renalware/events/create_event.rb +28 -0
- data/app/models/renalware/events/update_event.rb +27 -0
- data/app/models/renalware/patient.rb +2 -1
- data/app/pdfs/renalware/events/event_pdf.rb +124 -0
- data/app/presenters/renalware/events/event_pdf_presenter.rb +30 -0
- data/app/presenters/renalware/ukrdc/patient_presenter.rb +2 -1
- data/app/views/renalware/accesses/plans/new.html.slim +2 -1
- data/app/views/renalware/admissions/requests/_form.html.slim +1 -1
- data/app/views/renalware/api/ukrdc/patients/lab_orders/_lab_order.xml.builder +1 -1
- data/app/views/renalware/api/ukrdc/patients/lab_orders/_result_item.xml.builder +20 -14
- data/app/views/renalware/events/events/show.pdf.slim +9 -0
- data/app/views/renalware/hd/preference_sets/_form.html.slim +2 -1
- data/app/views/renalware/letters/letters/_form.html.slim +1 -1
- data/app/views/renalware/modalities/modalities/new.html.slim +2 -1
- data/app/views/renalware/patients/patients/_form.html.slim +1 -1
- data/app/views/renalware/pd/regimes/_form.html.slim +2 -1
- data/app/views/renalware/pd/training_sessions/_form.html.slim +2 -1
- data/app/views/renalware/problems/notes/_form.html.slim +1 -1
- data/app/views/renalware/problems/problems/edit.html.slim +1 -1
- data/app/views/renalware/problems/problems/new.html.slim +1 -1
- data/app/views/renalware/renal/profiles/_form.html.slim +3 -1
- data/config/initializers/delayed_job.rb +1 -1
- data/config/initializers/renalware.rb +4 -2
- data/config/routes.rb +3 -0
- data/db/migrate/20190218142207_add_filename_prefix_to_event_types.rb +6 -0
- data/db/migrate/20190225103005_add_info_to_hospital_centres.rb +7 -0
- data/lib/renalware/engine.rb +1 -0
- data/lib/renalware/version.rb +1 -1
- data/lib/tasks/db.rake +1 -1
- metadata +24 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 352f76d3ec23a7f2706d34b5852d8ce258815e6cc22715b67a27a568d7eb689c
|
4
|
+
data.tar.gz: 9ad9a5a56ada56b791d0890d952948f978a5bf76eb3311458ce157803409b588
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8085fb62067b61c714387e07d4be44525fdd133deb3a80ff7d41784b7ac6ebeff9c6a8e56ad87252a13c7069a9105bcf16a1c7a71729ef26214cd717ec0ac743
|
7
|
+
data.tar.gz: e81d0c7a65bf99133e0ca5097b9680f9524beed3489087047ac8254a59aa4caace983ff538774667329acc8a6913090defdd4eafd1c2447b03c9badad7944a73
|
@@ -2,35 +2,40 @@
|
|
2
2
|
|
3
3
|
# rubocop:disable Metrics/ClassLength
|
4
4
|
require_dependency "renalware/events"
|
5
|
+
require "attr_extras"
|
5
6
|
|
6
7
|
module Renalware
|
7
8
|
module Events
|
8
9
|
class EventsController < BaseController
|
9
10
|
include Renalware::Concerns::Pageable
|
11
|
+
include Renalware::Concerns::PdfRenderable
|
12
|
+
|
13
|
+
# Render a PDF of the event
|
14
|
+
def show
|
15
|
+
event = load_and_authorize_event_for_edit_or_update
|
16
|
+
respond_to do |format|
|
17
|
+
format.pdf do
|
18
|
+
pdf = EventPdf.new(EventPdfPresenter.new(event))
|
19
|
+
send_data pdf.render, type: "application/pdf", disposition: "inline"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
10
23
|
|
11
24
|
# HTML GET when rendering the new form
|
12
25
|
# JS GET after user selects event type, prompting us to return event-specific form fields
|
13
26
|
def new
|
14
27
|
save_path_to_return_to
|
15
|
-
|
16
|
-
patient: patient,
|
17
|
-
event: build_new_event,
|
18
|
-
event_types: event_types
|
19
|
-
}
|
28
|
+
render_new(build_new_event)
|
20
29
|
end
|
21
30
|
|
22
31
|
def create
|
23
32
|
event = new_event_for_patient(event_params)
|
24
33
|
|
25
|
-
if
|
34
|
+
if CreateEvent.call(event: event, by: current_user)
|
26
35
|
redirect_to return_url, notice: t(".success", model_name: "event")
|
27
36
|
else
|
28
37
|
flash.now[:error] = t(".failed", model_name: "event")
|
29
|
-
|
30
|
-
patient: patient,
|
31
|
-
event: event,
|
32
|
-
event_types: event_types
|
33
|
-
}
|
38
|
+
render_new(event)
|
34
39
|
end
|
35
40
|
end
|
36
41
|
|
@@ -47,29 +52,43 @@ module Renalware
|
|
47
52
|
end
|
48
53
|
|
49
54
|
def edit
|
50
|
-
|
51
|
-
patient: patient,
|
52
|
-
event: load_and_authorize_event_for_edit_or_update,
|
53
|
-
event_types: []
|
54
|
-
}
|
55
|
+
render_edit(load_and_authorize_event_for_edit_or_update)
|
55
56
|
end
|
56
57
|
|
57
58
|
def update
|
58
59
|
event = load_and_authorize_event_for_edit_or_update
|
59
|
-
|
60
|
+
|
61
|
+
if UpdateEvent.call(event: event, params: event_params, by: current_user)
|
60
62
|
redirect_to return_url, notice: t(".success", model_name: "event")
|
61
63
|
else
|
62
64
|
flash.now[:error] = failed_msg_for("event type")
|
63
|
-
|
64
|
-
patient: patient,
|
65
|
-
event: event,
|
66
|
-
event_types: []
|
67
|
-
}
|
65
|
+
render_edit(event)
|
68
66
|
end
|
69
67
|
end
|
70
68
|
|
69
|
+
def destroy
|
70
|
+
load_and_authorize_event_for_edit_or_update.destroy!
|
71
|
+
redirect_to patient_events_path
|
72
|
+
end
|
73
|
+
|
71
74
|
protected
|
72
75
|
|
76
|
+
def render_new(event)
|
77
|
+
render :new, locals: {
|
78
|
+
patient: patient,
|
79
|
+
event: event,
|
80
|
+
event_types: event_types
|
81
|
+
}
|
82
|
+
end
|
83
|
+
|
84
|
+
def render_edit(event)
|
85
|
+
render :edit, locals: {
|
86
|
+
patient: patient,
|
87
|
+
event: event,
|
88
|
+
event_types: []
|
89
|
+
}
|
90
|
+
end
|
91
|
+
|
73
92
|
def save_path_to_return_to
|
74
93
|
return unless request.format == :html
|
75
94
|
|
@@ -169,6 +188,26 @@ module Renalware
|
|
169
188
|
end
|
170
189
|
end
|
171
190
|
|
191
|
+
# Returns an array of objects defininig each category, with that category's types within it.
|
192
|
+
# rubocop:disable Metrics/MethodLength
|
193
|
+
def event_types_new
|
194
|
+
Events::Category.order(:position).map do |category|
|
195
|
+
types = category.types.order(:name).map do |event_type|
|
196
|
+
[
|
197
|
+
event_type.name,
|
198
|
+
event_type.id,
|
199
|
+
{
|
200
|
+
data: {
|
201
|
+
source: new_patient_event_path(patient, event_type_id: event_type.id, format: :js)
|
202
|
+
}
|
203
|
+
}
|
204
|
+
]
|
205
|
+
end
|
206
|
+
OpenStruct.new(name: category.name, id: category.id, types: types)
|
207
|
+
end
|
208
|
+
end
|
209
|
+
# rubocop:enable Metrics/MethodLength
|
210
|
+
|
172
211
|
def query_params
|
173
212
|
params.fetch(:q, {})
|
174
213
|
end
|
@@ -13,6 +13,7 @@ module Renalware
|
|
13
13
|
class SessionTimeoutController < BaseController
|
14
14
|
prepend_before_action :skip_timeout, only: :has_user_timed_out
|
15
15
|
skip_before_action :authenticate_user!, only: :has_user_timed_out
|
16
|
+
skip_before_action :track_ahoy_visit, only: :has_user_timed_out
|
16
17
|
protect_from_forgery except: [:has_user_timed_out, :reset_user_clock]
|
17
18
|
|
18
19
|
# Note this action will NOT update the session activity (thus keeping the session alive)
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/events"
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
module Renalware
|
7
|
+
module Events
|
8
|
+
# Used for example in a host app like renalware-kch to generate a PDF event for saving to
|
9
|
+
# the electronic public register
|
10
|
+
class SavePdfEventToFileJob < ApplicationJob
|
11
|
+
queue_as :pdf_generation
|
12
|
+
queue_with_priority 1
|
13
|
+
|
14
|
+
def perform(event:, file_path:)
|
15
|
+
file_path = Pathname(file_path)
|
16
|
+
create_folder_if_not_exists(file_path)
|
17
|
+
File.open(file_path, "wb") { |file| file << pdf_data_for(event) }
|
18
|
+
end
|
19
|
+
|
20
|
+
def pdf_data_for(event)
|
21
|
+
decorated_event = EventPdfPresenter.new(event)
|
22
|
+
EventPdf.new(decorated_event).render
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_folder_if_not_exists(path)
|
26
|
+
FileUtils.mkdir_p(path.dirname)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/events"
|
4
|
+
require "attr_extras"
|
5
|
+
|
6
|
+
module Renalware
|
7
|
+
module Events
|
8
|
+
# A wrapper around the creation of an Event to allow is to broadcast a Wisper event to the
|
9
|
+
# 'world' (or rather just whoever has been configured in the broadcast subscription map).
|
10
|
+
class CreateEvent
|
11
|
+
include Broadcasting
|
12
|
+
pattr_initialize [:event!, :by!]
|
13
|
+
|
14
|
+
# Returns the boolean result of event.save_by
|
15
|
+
def self.call(**args)
|
16
|
+
new(**args)
|
17
|
+
.broadcasting_to_configured_subscribers
|
18
|
+
.call
|
19
|
+
end
|
20
|
+
|
21
|
+
def call
|
22
|
+
event.save_by(by).tap do |success|
|
23
|
+
broadcast(:event_created, event) if success
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/events"
|
4
|
+
|
5
|
+
module Renalware
|
6
|
+
module Events
|
7
|
+
# A wrapper around the updating of an Event to allow is to broadcast a Wisper event to anyone
|
8
|
+
# configure to listen in the broadcast subscription map.
|
9
|
+
class UpdateEvent
|
10
|
+
include Broadcasting
|
11
|
+
pattr_initialize [:event!, :params!, :by!]
|
12
|
+
|
13
|
+
# Returns the boolean result of event.update_by
|
14
|
+
def self.call(**args)
|
15
|
+
new(**args)
|
16
|
+
.broadcasting_to_configured_subscribers
|
17
|
+
.call
|
18
|
+
end
|
19
|
+
|
20
|
+
def call
|
21
|
+
event.update_by(by, params).tap do |success|
|
22
|
+
broadcast(:event_updated, event) if success
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -120,9 +120,10 @@ module Renalware
|
|
120
120
|
def to_s(format = :default)
|
121
121
|
title_suffix = " (#{title})" if has_title?
|
122
122
|
formatted_name = "#{family_name.upcase}, #{given_name}#{title_suffix}"
|
123
|
+
formatted_nhs_number = " (#{nhs_number})" if nhs_number.present?
|
123
124
|
case format
|
124
125
|
when :default then formatted_name
|
125
|
-
when :long then "#{formatted_name}
|
126
|
+
when :long then "#{formatted_name}#{formatted_nhs_number}"
|
126
127
|
else full_name
|
127
128
|
end
|
128
129
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/events"
|
4
|
+
|
5
|
+
# rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
6
|
+
module Renalware
|
7
|
+
module Events
|
8
|
+
# We have used wicked_pdf (which shells out to wkhtmltopdf) up to know, but using prawn here
|
9
|
+
# as it Event PDFs are somewhat simpler, and there is no extant html equivalent we can render.
|
10
|
+
# Its also a useful test to see if this is a better approach all round. It is certainly much
|
11
|
+
# quicker and less resource intensive to create the PDFs.
|
12
|
+
class EventPdf
|
13
|
+
include Prawn::View
|
14
|
+
attr_reader :event
|
15
|
+
delegate :patient, :event_type, to: :event
|
16
|
+
|
17
|
+
def initialize(event)
|
18
|
+
@event = event
|
19
|
+
build
|
20
|
+
end
|
21
|
+
|
22
|
+
def build
|
23
|
+
render_hospital_centre_info
|
24
|
+
render_patient_identifiers
|
25
|
+
render_common_event_fields
|
26
|
+
render_specific_event_fields(event.document)
|
27
|
+
render_notes
|
28
|
+
self
|
29
|
+
end
|
30
|
+
|
31
|
+
def render_header
|
32
|
+
font_size 12
|
33
|
+
text title
|
34
|
+
move_down 10
|
35
|
+
text event.patient.to_s, style: :bold
|
36
|
+
move_down 10
|
37
|
+
end
|
38
|
+
|
39
|
+
def render_patient_identifiers
|
40
|
+
move_cursor_to 675
|
41
|
+
font_size 10
|
42
|
+
bounding_box([0, cursor], width: 340) do
|
43
|
+
render_header
|
44
|
+
font_size 10
|
45
|
+
text "DOB: #{I18n.l(patient.born_on)}"
|
46
|
+
text "NHS: #{patient.nhs_number}"
|
47
|
+
patient.hospital_identifiers.all.each do |key, value|
|
48
|
+
text "#{key}: #{value}"
|
49
|
+
end
|
50
|
+
move_down 10
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def render_common_event_fields
|
55
|
+
text "Date: #{I18n.l(event.date_time)}"
|
56
|
+
move_down 10
|
57
|
+
if event.respond_to?(:description)
|
58
|
+
text "<u>Description</u>", inline_format: true
|
59
|
+
move_down 5
|
60
|
+
text event.description
|
61
|
+
move_down 10
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def render_specific_event_fields(document)
|
66
|
+
document.attributes.each do |name, value|
|
67
|
+
# could handle recursive documents here but none exists ATM even in HEROIC
|
68
|
+
text "#{document.class.human_attribute_name(name)}: #{value}"
|
69
|
+
end
|
70
|
+
move_down 10
|
71
|
+
end
|
72
|
+
|
73
|
+
def render_notes
|
74
|
+
text "<u>Notes</u>", inline_format: true
|
75
|
+
move_down 5
|
76
|
+
output_html_as_text_but_preserving_paragraph_breaks(text: event.notes)
|
77
|
+
end
|
78
|
+
|
79
|
+
def render_hospital_centre_info
|
80
|
+
bounding_box([340, cursor], width: 200) do
|
81
|
+
image_path = "app/assets/images/renalware/nhs_a4_letter_logo_black.png"
|
82
|
+
image Renalware::Engine.root.join(image_path), height: 30, position: :right
|
83
|
+
move_down 10
|
84
|
+
text event.hospital_centre_trust_name, align: :right
|
85
|
+
text event.hospital_centre_trust_caption, align: :right
|
86
|
+
font_size 8
|
87
|
+
output_html_as_text_but_preserving_paragraph_breaks(
|
88
|
+
text: interpret_new_lines_in(event.hospital_centre_info),
|
89
|
+
strip_tags: false,
|
90
|
+
align: :right,
|
91
|
+
inline_format: true
|
92
|
+
)
|
93
|
+
font_size 10
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
# Ensure any new line characters in a string are interpreted as actual new lines.
|
98
|
+
# This lets use /n in seed data and in the database.
|
99
|
+
def interpret_new_lines_in(text)
|
100
|
+
text&.gsub('\n', "\n")
|
101
|
+
end
|
102
|
+
|
103
|
+
# Create new line if there is a <br>.
|
104
|
+
# If there is an empty line (caused by <br><br>) move down to indicate a new paragraph.
|
105
|
+
def output_html_as_text_but_preserving_paragraph_breaks(text:, strip_tags: true, **args)
|
106
|
+
return if text.blank?
|
107
|
+
|
108
|
+
text.split("<br>").each do |paragraph|
|
109
|
+
if strip_tags
|
110
|
+
text ActionView::Base.full_sanitizer.sanitize(paragraph), **args
|
111
|
+
else
|
112
|
+
text paragraph, **args
|
113
|
+
end
|
114
|
+
move_down(10) if ActionView::Base.full_sanitizer.sanitize(paragraph).blank?
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
def title
|
119
|
+
event_type.title || event_type.name
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
# rubocop:enable Metrics/AbcSize, Metrics/MethodLength
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_dependency "renalware/events"
|
4
|
+
|
5
|
+
module Renalware
|
6
|
+
module Events
|
7
|
+
class EventPdfPresenter < SimpleDelegator
|
8
|
+
class DefaultHospitalCentreNotFoundError < StandardError; end
|
9
|
+
class DefaultHospitalCentreNotSetError < StandardError; end
|
10
|
+
|
11
|
+
delegate :info,
|
12
|
+
:trust_name,
|
13
|
+
:trust_caption,
|
14
|
+
to: :hospital_centre, prefix: true, allow_nil: true
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def hospital_centre
|
19
|
+
@hospital_centre ||= begin
|
20
|
+
centre = Renalware::Hospitals::Centre.find_by(code: default_hospital_centre_code)
|
21
|
+
centre.presence || raise(DefaultHospitalCentreNotFoundError, default_hospital_centre_code)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_hospital_centre_code
|
26
|
+
Renalware.config.ukrdc_site_code.presence || raise(DefaultHospitalCentreNotSetError)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -60,6 +60,7 @@ module Renalware
|
|
60
60
|
letters_patient
|
61
61
|
.letters
|
62
62
|
.approved_or_completed
|
63
|
+
.includes(:updated_by, :author, :letterhead, :archive)
|
63
64
|
.where("updated_at > ?", changes_since),
|
64
65
|
Renalware::Letters::LetterPresenterFactory
|
65
66
|
)
|
@@ -68,7 +69,7 @@ module Renalware
|
|
68
69
|
def finished_hd_sessions
|
69
70
|
hd_patient
|
70
71
|
.finished_hd_sessions
|
71
|
-
.includes(:patient, :dialysate)
|
72
|
+
.includes(:patient, :dialysate, :updated_by)
|
72
73
|
.where("hd_sessions.updated_at > ?", changes_since)
|
73
74
|
end
|
74
75
|
|
@@ -17,7 +17,7 @@
|
|
17
17
|
strong= request.patient.to_s(:long)
|
18
18
|
|
19
19
|
= f.input :patient_id, as: :hidden
|
20
|
-
= f.input :reason_id, collection: reasons, wrapper: :horizontal_medium
|
20
|
+
= f.input :reason_id, collection: reasons, wrapper: :horizontal_medium, autofocus: true
|
21
21
|
= f.input :priority, wrapper: :horizontal_small
|
22
22
|
= f.input :hospital_unit_id, collection: hospital_units, wrapper: :horizontal_medium
|
23
23
|
= f.input :notes, as: :text, wrapper: :horizontal_large, input_html: { rows: 5 }
|
@@ -45,7 +45,7 @@ xml.LabOrder do
|
|
45
45
|
|
46
46
|
xml.ResultItems do
|
47
47
|
render partial: "renalware/api/ukrdc/patients/lab_orders/result_item",
|
48
|
-
collection: request.observations
|
48
|
+
collection: request.observations,
|
49
49
|
as: :observation,
|
50
50
|
locals: { builder: builder, patient: patient }
|
51
51
|
end
|
@@ -3,21 +3,27 @@
|
|
3
3
|
xml = builder
|
4
4
|
observation = Renalware::Pathology::ObservationPresenter.new(observation)
|
5
5
|
observation = Renalware::UKRDC::PathologyObservationPresenter.new(observation)
|
6
|
+
result = observation.result || ""
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
8
|
+
# The UKRDC XSD Schema specifies that observations cannot be longer than 20 characters.
|
9
|
+
# KCH regularly get notes in the result, saying things like "No recent Urea result" - which in this
|
10
|
+
# case exceeds 20 characters. We need to skip these.
|
11
|
+
if result.length <= 20
|
12
|
+
xml.ResultItem do
|
13
|
+
xml.EnteredOn observation.updated_at&.iso8601
|
14
|
+
xml.PrePost observation.pre_post(patient_is_on_hd: patient.current_modality_hd?)
|
15
|
+
xml.ServiceId do
|
16
|
+
if observation.description_loinc_code.present?
|
17
|
+
xml.CodingStandard "PV"
|
18
|
+
xml.Code observation.description_loinc_code
|
19
|
+
else
|
20
|
+
xml.CodingStandard "LOCAL"
|
21
|
+
xml.Code observation.description_code
|
22
|
+
end
|
23
|
+
xml.Description observation.description_name
|
17
24
|
end
|
18
|
-
xml.
|
25
|
+
xml.ResultValue observation.result
|
26
|
+
xml.ResultValueUnits observation.measurement_unit_name
|
27
|
+
xml.ObservationTime observation.observed_at&.iso8601
|
19
28
|
end
|
20
|
-
xml.ResultValue observation.result
|
21
|
-
xml.ResultValueUnits observation.measurement_unit_name
|
22
|
-
xml.ObservationTime observation.observed_at&.iso8601
|
23
29
|
end
|
@@ -7,7 +7,8 @@ ruby:
|
|
7
7
|
|
8
8
|
= f.input :schedule_definition_id,
|
9
9
|
collection: Renalware::HD::ScheduleDefinition.ordered,
|
10
|
-
wrapper: :horizontal_small
|
10
|
+
wrapper: :horizontal_small,
|
11
|
+
autofocus: true
|
11
12
|
= f.input :other_schedule,
|
12
13
|
input_html: { class: "small-input" }
|
13
14
|
= f.association :hospital_unit,
|
@@ -17,7 +17,8 @@
|
|
17
17
|
collection: Renalware::Modalities::Description.where(hidden: false),
|
18
18
|
input_html: { id: "modality-description-select" },
|
19
19
|
label_method: :name, value_method: :id,
|
20
|
-
wrapper: :horizontal_medium
|
20
|
+
wrapper: :horizontal_medium,
|
21
|
+
autofocus: true
|
21
22
|
|
22
23
|
.hide-death
|
23
24
|
= m.input :modal_change_type,
|
@@ -5,7 +5,8 @@
|
|
5
5
|
= f.input :treatment,
|
6
6
|
collection: available_pd_treatments_for(f.object),
|
7
7
|
include_blank: t("collection.blank_option"),
|
8
|
-
wrapper: :horizontal_medium
|
8
|
+
wrapper: :horizontal_medium,
|
9
|
+
autofocus: true
|
9
10
|
|
10
11
|
- if f.object.apd?
|
11
12
|
= f.input :assistance_type, wrapper: :horizontal_small, default: :none
|
@@ -9,7 +9,8 @@
|
|
9
9
|
= f.input :ignore_me, as: :hidden
|
10
10
|
= f.association :training_site,
|
11
11
|
collection: Renalware::PD::TrainingSite.ordered,
|
12
|
-
wrapper: :horizontal_small
|
12
|
+
wrapper: :horizontal_small,
|
13
|
+
autofocus: true
|
13
14
|
|
14
15
|
= f.association :training_type,
|
15
16
|
collection: Renalware::PD::TrainingType.ordered,
|
@@ -2,7 +2,7 @@
|
|
2
2
|
= simple_form_for note, url: url,
|
3
3
|
wrapper: :horizontal_form, remote: true do |f|
|
4
4
|
|
5
|
-
= f.input :description, as: :text, input_html: { cols: 50, rows: 3 }
|
5
|
+
= f.input :description, as: :text, input_html: { cols: 50, rows: 3 }, autofocus: true
|
6
6
|
|
7
7
|
.row
|
8
8
|
.large-offset-3.large-7.columns
|
@@ -6,7 +6,7 @@
|
|
6
6
|
url: patient_problem_path(patient, problem),
|
7
7
|
html: { autocomplete: "off", class: "problem-form" } do |f|
|
8
8
|
|
9
|
-
= f.input :description, as: :text
|
9
|
+
= f.input :description, as: :text, autofocus: true
|
10
10
|
= f.button :button, "Save"
|
11
11
|
span= " or "
|
12
12
|
= link_to "cancel", patient_problems_path(patient)
|
@@ -5,7 +5,9 @@
|
|
5
5
|
= render layout: "renalware/shared/fieldset",
|
6
6
|
locals: { legend: "Diagnosis & ESRF Info", name: "diagnosis" } do
|
7
7
|
|
8
|
-
= f.input :esrf_on,
|
8
|
+
= f.input :esrf_on,
|
9
|
+
as: :date_picker,
|
10
|
+
wrapper: :horizontal_datepicker
|
9
11
|
= f.input :weight_at_esrf, wrapper: :horizontal_small
|
10
12
|
= f.input :modality_at_esrf,
|
11
13
|
include_blank: "Select modality",
|
@@ -5,7 +5,7 @@ Delayed::Worker.destroy_failed_jobs = false
|
|
5
5
|
Delayed::Worker.max_attempts = 10 # overridden e.g. in FeedJob
|
6
6
|
Delayed::Worker.max_run_time = 2.hours
|
7
7
|
Delayed::Worker.read_ahead = 10
|
8
|
-
Delayed::Worker.sleep_delay =
|
8
|
+
Delayed::Worker.sleep_delay = 8 # Also affects how long it takes delayed_job to stop on Crl+C
|
9
9
|
Delayed::Worker.default_priority = 5 # use a lower number to get preferential treatment
|
10
10
|
# Will only raise an exception on TERM signals but INT will wait for the current job to finish.
|
11
11
|
Delayed::Worker.raise_signal_exceptions = :term
|
@@ -21,7 +21,7 @@ require_dependency "renalware"
|
|
21
21
|
# end
|
22
22
|
# end
|
23
23
|
# As it stands its a bit too easy for the exposed subscription map hash to be overwritten by a host
|
24
|
-
# application with confusing and
|
24
|
+
# application with confusing and outcomes.
|
25
25
|
Renalware.configure do |config|
|
26
26
|
config.broadcast_subscription_map = {
|
27
27
|
"Renalware::Modalities::ChangePatientModality" => [
|
@@ -39,7 +39,9 @@ Renalware.configure do |config|
|
|
39
39
|
"Renalware::Letters::ResolveDefaultElectronicCCs" => [
|
40
40
|
"Renalware::HD::PatientListener"
|
41
41
|
],
|
42
|
-
"Renalware::Pathology::CreateObservationRequests" => []
|
42
|
+
"Renalware::Pathology::CreateObservationRequests" => [],
|
43
|
+
"Renalware::Events::CreateEvent" => [],
|
44
|
+
"Renalware::Events::UpdateEvent" => []
|
43
45
|
}
|
44
46
|
end
|
45
47
|
|
data/config/routes.rb
CHANGED
@@ -330,6 +330,9 @@ Renalware::Engine.routes.draw do
|
|
330
330
|
|
331
331
|
# Events
|
332
332
|
resources :events, only: [:new, :create, :index], controller: "events/events"
|
333
|
+
constraints(format: /(pdf)/) do
|
334
|
+
resources :events, only: :show, controller: "events/events"
|
335
|
+
end
|
333
336
|
|
334
337
|
resources :swabs,
|
335
338
|
only: [:new, :create, :edit, :update],
|
@@ -0,0 +1,7 @@
|
|
1
|
+
class AddInfoToHospitalCentres < ActiveRecord::Migration[5.2]
|
2
|
+
def change
|
3
|
+
add_column :hospital_centres, :info, :text, null: true
|
4
|
+
add_column :hospital_centres, :trust_name, :string, null: true
|
5
|
+
add_column :hospital_centres, :trust_caption, :string, null: true
|
6
|
+
end
|
7
|
+
end
|
data/lib/renalware/engine.rb
CHANGED
data/lib/renalware/version.rb
CHANGED
data/lib/tasks/db.rake
CHANGED
@@ -14,7 +14,7 @@ namespace :db do
|
|
14
14
|
namespace :demo do
|
15
15
|
desc "Loads demo seed data from the renalware-core gem"
|
16
16
|
task seed: :environment do
|
17
|
-
if Rails.env.development?
|
17
|
+
if Rails.env.development? || ENV["ALLOW_DEMO_SEEDS"] == "1"
|
18
18
|
require Renalware::Engine.root.join("spec/dummy/db/seeds")
|
19
19
|
else
|
20
20
|
puts "Task currently only possible in development environment"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: renalware-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.70
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Airslie
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-02-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: active_type
|
@@ -556,6 +556,20 @@ dependencies:
|
|
556
556
|
- - "~>"
|
557
557
|
- !ruby/object:Gem::Version
|
558
558
|
version: 1.1.3
|
559
|
+
- !ruby/object:Gem::Dependency
|
560
|
+
name: prawn
|
561
|
+
requirement: !ruby/object:Gem::Requirement
|
562
|
+
requirements:
|
563
|
+
- - "~>"
|
564
|
+
- !ruby/object:Gem::Version
|
565
|
+
version: 2.2.2
|
566
|
+
type: :runtime
|
567
|
+
prerelease: false
|
568
|
+
version_requirements: !ruby/object:Gem::Requirement
|
569
|
+
requirements:
|
570
|
+
- - "~>"
|
571
|
+
- !ruby/object:Gem::Version
|
572
|
+
version: 2.2.2
|
559
573
|
- !ruby/object:Gem::Dependency
|
560
574
|
name: puma
|
561
575
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1314,6 +1328,7 @@ files:
|
|
1314
1328
|
- app/jobs/feed_job.rb
|
1315
1329
|
- app/jobs/hl7_message_example.yml
|
1316
1330
|
- app/jobs/refresh_materialized_view_job.rb
|
1331
|
+
- app/jobs/renalware/events/save_pdf_event_to_file_job.rb
|
1317
1332
|
- app/jobs/renalware/hd/generate_monthly_statistics.rb
|
1318
1333
|
- app/jobs/renalware/hd/generate_monthly_statistics_for_patient_job.rb
|
1319
1334
|
- app/jobs/renalware/hd/update_rolling_patient_statistics_job.rb
|
@@ -1408,6 +1423,7 @@ files:
|
|
1408
1423
|
- app/models/renalware/drugs/type.rb
|
1409
1424
|
- app/models/renalware/events.rb
|
1410
1425
|
- app/models/renalware/events/biopsy.rb
|
1426
|
+
- app/models/renalware/events/create_event.rb
|
1411
1427
|
- app/models/renalware/events/event.rb
|
1412
1428
|
- app/models/renalware/events/event_query.rb
|
1413
1429
|
- app/models/renalware/events/investigation.rb
|
@@ -1415,6 +1431,7 @@ files:
|
|
1415
1431
|
- app/models/renalware/events/simple.rb
|
1416
1432
|
- app/models/renalware/events/swab.rb
|
1417
1433
|
- app/models/renalware/events/type.rb
|
1434
|
+
- app/models/renalware/events/update_event.rb
|
1418
1435
|
- app/models/renalware/feeds.rb
|
1419
1436
|
- app/models/renalware/feeds/file.rb
|
1420
1437
|
- app/models/renalware/feeds/file_type.rb
|
@@ -1806,6 +1823,7 @@ files:
|
|
1806
1823
|
- app/models/renalware/virology/vaccination.rb
|
1807
1824
|
- app/models/renalware/virology/version.rb
|
1808
1825
|
- app/models/renalware/zip_archive.rb
|
1826
|
+
- app/pdfs/renalware/events/event_pdf.rb
|
1809
1827
|
- app/policies/application_policy.rb
|
1810
1828
|
- app/policies/renalware/admin/cache_policy.rb
|
1811
1829
|
- app/policies/renalware/admissions/admission_policy.rb
|
@@ -1896,6 +1914,7 @@ files:
|
|
1896
1914
|
- app/presenters/renalware/country_presenter.rb
|
1897
1915
|
- app/presenters/renalware/dashboard/dashboard_presenter.rb
|
1898
1916
|
- app/presenters/renalware/directory/person_auto_complete_presenter.rb
|
1917
|
+
- app/presenters/renalware/events/event_pdf_presenter.rb
|
1899
1918
|
- app/presenters/renalware/events/events_presenter.rb
|
1900
1919
|
- app/presenters/renalware/events/summary_part.rb
|
1901
1920
|
- app/presenters/renalware/hd/dashboard_presenter.rb
|
@@ -2173,6 +2192,7 @@ files:
|
|
2173
2192
|
- app/views/renalware/events/events/inputs/_swab.html.slim
|
2174
2193
|
- app/views/renalware/events/events/new.html.slim
|
2175
2194
|
- app/views/renalware/events/events/new.js.erb
|
2195
|
+
- app/views/renalware/events/events/show.pdf.slim
|
2176
2196
|
- app/views/renalware/events/events/simple/_event.html.slim
|
2177
2197
|
- app/views/renalware/events/events/simple/_list.html.slim
|
2178
2198
|
- app/views/renalware/events/events/simple/_table.html.slim
|
@@ -3384,6 +3404,8 @@ files:
|
|
3384
3404
|
- db/migrate/20181126123745_refresh_hd_grouped_transmission_logs_view.rb
|
3385
3405
|
- db/migrate/20181217124025_change_ukrdc_transmission_log_error_type.rb
|
3386
3406
|
- db/migrate/20190104095254_create_active_storage_tables.active_storage.rb
|
3407
|
+
- db/migrate/20190218142207_add_filename_prefix_to_event_types.rb
|
3408
|
+
- db/migrate/20190225103005_add_info_to_hospital_centres.rb
|
3387
3409
|
- db/seeds.rb
|
3388
3410
|
- db/seeds/default/accesses/access_pd_catheter_insertion_techniques.csv
|
3389
3411
|
- db/seeds/default/accesses/access_pd_catheter_insertion_techniques.rb
|