renalware-core 2.0.25 → 2.0.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/stylesheets/renalware/modules/_pathology.scss +28 -1
  3. data/app/assets/stylesheets/renalware/modules/_system.scss +27 -0
  4. data/app/assets/stylesheets/renalware/partials/_forms.scss +2 -1
  5. data/app/assets/stylesheets/renalware/partials/_tooltip.scss +347 -0
  6. data/app/controllers/renalware/hospitals/wards_controller.rb +61 -3
  7. data/app/controllers/renalware/session_timeout_controller.rb +1 -0
  8. data/app/controllers/renalware/system/messages_controller.rb +69 -0
  9. data/app/models/concerns/renalware/patients_ransack_helper.rb +2 -2
  10. data/app/models/renalware/admissions/consult_query.rb +2 -3
  11. data/app/models/renalware/pathology/adjust_observation.rb +72 -0
  12. data/app/models/renalware/pathology/create_observation_requests.rb +5 -1
  13. data/app/models/renalware/pathology/message_listener.rb +1 -0
  14. data/app/models/renalware/pathology/observation_requests_attributes_builder.rb +5 -1
  15. data/app/models/renalware/pathology/observations_grouped_by_date_query.rb +1 -1
  16. data/app/models/renalware/pathology/observations_grouped_by_date_table.rb +17 -3
  17. data/app/models/renalware/pathology.rb +3 -0
  18. data/app/models/renalware/system/message.rb +41 -0
  19. data/app/policies/renalware/system/message_policy.rb +21 -0
  20. data/app/views/renalware/admin/cache/show.html.slim +2 -2
  21. data/app/views/renalware/devise/sessions/new.html.slim +1 -0
  22. data/app/views/renalware/hospitals/units/index.html.slim +3 -1
  23. data/app/views/renalware/hospitals/wards/_form.html.slim +3 -0
  24. data/app/views/renalware/hospitals/wards/edit.html.slim +12 -0
  25. data/app/views/renalware/hospitals/wards/index.html.slim +27 -0
  26. data/app/views/renalware/hospitals/wards/new.html.slim +12 -0
  27. data/app/views/renalware/letters/formatted_letters/_letter.html.slim +4 -0
  28. data/app/views/renalware/navigation/_super_admin.html.slim +1 -0
  29. data/app/views/renalware/pathology/historical_observation_results/_table.html.slim +7 -2
  30. data/app/views/renalware/pathology/historical_observation_results/index.html.slim +1 -3
  31. data/app/views/renalware/pathology/recent_observation_results/_table.html.slim +20 -12
  32. data/app/views/renalware/system/messages/_form.html.slim +18 -0
  33. data/app/views/renalware/system/messages/_list.html.slim +4 -0
  34. data/app/views/renalware/system/messages/_message.html.slim +4 -0
  35. data/app/views/renalware/system/messages/edit.html.slim +3 -0
  36. data/app/views/renalware/system/messages/index.html.slim +30 -0
  37. data/app/views/renalware/system/messages/new.html.slim +3 -0
  38. data/app/views/renalware/transplants/mdm/_bottom.html.slim +2 -2
  39. data/config/initializers/renalware.rb +2 -1
  40. data/config/permissions.yml +1 -0
  41. data/config/routes.rb +2 -0
  42. data/db/migrate/20180514151627_create_system_messages.rb +13 -0
  43. data/db/migrate/20180516111411_create_view_patient_current_modalities.rb +5 -0
  44. data/db/views/patient_current_modalities_v01.sql +16 -0
  45. data/lib/renalware/version.rb +1 -1
  46. data/spec/factories/system/messages.rb +9 -0
  47. metadata +21 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 30e742fd5ca6fbadf5677398c873b1a644ac00076e7da84387ba9892252496ac
4
- data.tar.gz: 4a575ab8a82880f2b9e66901415c42fd118e7cd0833d986bd899553ae0dbf317
3
+ metadata.gz: 0c79d277b0b81eceb715ec9f31c7a25cc280b0e3ec6ce8347136d6632cb5f8cc
4
+ data.tar.gz: 05aac190cf455654b306f86e6cdac5e46eefcb0f5aa9171fe9c3b52cc3d36aa0
5
5
  SHA512:
6
- metadata.gz: db22bef034ecdcef77e77d15a524a3a924d42fec046b377ca3f666a1d7070dd9288c1e355cc540013fdf585d11f2711e1a4043e55bd84796fe97b0e2c7d129e3
7
- data.tar.gz: 13ac8dd0fb46a1eb03594e8c7dce8be3ddf9bcd423fcf15faa7491c7cbedd395c03b66835fd5d082d7de65a5f3db02f727186f5eb10b1a08d0b4587dc7c1cafa
6
+ metadata.gz: df11ef7661930acd45bc1a4c05d313abed4f9bb111602ebd1019fd8faf99b8c8514a1757329d6bfe0912f08177efca748f024dce62eff5c4d96f79bde64901a9
7
+ data.tar.gz: 6d82a3f8a45dba2cf167a6709a09a8c2b023b1d2b83b346cd60b53259acc101a9081f8605a77cbf0a6f6d9826d46826599144eccec515a5c0e67ec5e5c2ce891
@@ -7,6 +7,33 @@ table#observations {
7
7
  white-space: nowrap;
8
8
  width: auto;
9
9
 
10
+ tbody {
11
+ th {
12
+ padding: 0 .3rem;
13
+ }
14
+
15
+ td {
16
+ position: relative;
17
+ padding: 0 .2rem;
18
+ height: 2rem;
19
+ text-align: center;
20
+ overflow: visible;
21
+
22
+ // Generated with http://triangle.designyourcode.io/
23
+ .triangle-top-right {
24
+ display: inline-block;
25
+ width: 0;
26
+ height: 0;
27
+ border-style: solid;
28
+ border-width: 0 11px 10px 0;
29
+ border-color: transparent $nhs-bright-blue transparent transparent;
30
+ right: 0;
31
+ top: 0;
32
+ position: absolute;
33
+ }
34
+ }
35
+ }
36
+
10
37
  td.hgb {
11
38
  background-color : #fc9;
12
39
  }
@@ -21,7 +48,7 @@ table#observations {
21
48
 
22
49
  td, th {
23
50
  border: 1px solid #ddd;
24
- font-size: 0.8rem;
51
+ font-size: 0.85rem;
25
52
  }
26
53
 
27
54
  &.transposed {
@@ -0,0 +1,27 @@
1
+ .system-message {
2
+ line-height: 1.5;
3
+ h1, h2, p, div, span {
4
+ color: $white;
5
+ margin-top: 0;
6
+ }
7
+
8
+ &.info,
9
+ &.success,
10
+ &.warning {
11
+ h1, h2, p, div, span {
12
+ color: $black;
13
+ }
14
+ }
15
+
16
+ p {
17
+ padding: 0;
18
+ margin: 0;
19
+ }
20
+ }
21
+
22
+ .example-severity-colour {
23
+
24
+ &.info {
25
+
26
+ }
27
+ }
@@ -1,4 +1,5 @@
1
- input::placeholder {
1
+ input::placeholder,
2
+ textarea::placeholder {
2
3
  color: $form-hint-colour
3
4
  }
4
5
 
@@ -2,3 +2,350 @@
2
2
  cursor: default !important;
3
3
  font-weight: normal;
4
4
  }
5
+
6
+ .tooltip {
7
+ border-radius: 3px;
8
+ padding: .2rem .4rem;
9
+ background-color: $dark-grey;
10
+ }
11
+
12
+
13
+ // Tweaked CSS tooltips from https://github.com/kazzkiq/balloon.css
14
+ button[data-balloon] {
15
+ overflow: visible; }
16
+
17
+ [data-balloon] {
18
+ position: relative;
19
+ cursor: pointer; }
20
+ [data-balloon]:after {
21
+ filter: alpha(opacity=0);
22
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
23
+ -moz-opacity: 0;
24
+ -khtml-opacity: 0;
25
+ opacity: 0;
26
+ pointer-events: none;
27
+ -webkit-transition: all 0.18s ease-out 0.18s;
28
+ -moz-transition: all 0.18s ease-out 0.18s;
29
+ -ms-transition: all 0.18s ease-out 0.18s;
30
+ -o-transition: all 0.18s ease-out 0.18s;
31
+ transition: all 0.18s ease-out 0.18s;
32
+ font-family: sans-serif !important;
33
+ font-weight: normal !important;
34
+ font-style: normal !important;
35
+ text-shadow: none !important;
36
+ font-size: .9rem !important;
37
+ background: rgba(17, 17, 17, 0.9);
38
+ border-radius: 3px;
39
+ color: #fff;
40
+ content: attr(data-balloon);
41
+ padding: .5em 1em;
42
+ position: absolute;
43
+ white-space: nowrap;
44
+ z-index: 10; }
45
+ [data-balloon]:before {
46
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(0)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
47
+ background-size: 100% auto;
48
+ width: 18px;
49
+ height: 6px;
50
+ filter: alpha(opacity=0);
51
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
52
+ -moz-opacity: 0;
53
+ -khtml-opacity: 0;
54
+ opacity: 0;
55
+ pointer-events: none;
56
+ -webkit-transition: all 0.18s ease-out 0.18s;
57
+ -moz-transition: all 0.18s ease-out 0.18s;
58
+ -ms-transition: all 0.18s ease-out 0.18s;
59
+ -o-transition: all 0.18s ease-out 0.18s;
60
+ transition: all 0.18s ease-out 0.18s;
61
+ content: '';
62
+ position: absolute;
63
+ z-index: 10; }
64
+ [data-balloon]:hover:before, [data-balloon]:hover:after, [data-balloon][data-balloon-visible]:before, [data-balloon][data-balloon-visible]:after {
65
+ filter: alpha(opacity=100);
66
+ -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=100)";
67
+ -moz-opacity: 1;
68
+ -khtml-opacity: 1;
69
+ opacity: 1;
70
+ pointer-events: auto; }
71
+ [data-balloon].font-awesome:after {
72
+ font-family: FontAwesome; }
73
+ [data-balloon][data-balloon-break]:after {
74
+ white-space: pre; }
75
+ [data-balloon][data-balloon-blunt]:before, [data-balloon][data-balloon-blunt]:after {
76
+ -webkit-transition: none;
77
+ -moz-transition: none;
78
+ -ms-transition: none;
79
+ -o-transition: none;
80
+ transition: none; }
81
+ [data-balloon][data-balloon-pos="up"]:after {
82
+ bottom: 100%;
83
+ left: 50%;
84
+ margin-bottom: 11px;
85
+ -webkit-transform: translate(-50%, 10px);
86
+ -moz-transform: translate(-50%, 10px);
87
+ -ms-transform: translate(-50%, 10px);
88
+ transform: translate(-50%, 10px);
89
+ -webkit-transform-origin: top;
90
+ -moz-transform-origin: top;
91
+ -ms-transform-origin: top;
92
+ transform-origin: top; }
93
+ [data-balloon][data-balloon-pos="up"]:before {
94
+ bottom: 100%;
95
+ left: 50%;
96
+ margin-bottom: 5px;
97
+ -webkit-transform: translate(-50%, 10px);
98
+ -moz-transform: translate(-50%, 10px);
99
+ -ms-transform: translate(-50%, 10px);
100
+ transform: translate(-50%, 10px);
101
+ -webkit-transform-origin: top;
102
+ -moz-transform-origin: top;
103
+ -ms-transform-origin: top;
104
+ transform-origin: top; }
105
+ [data-balloon][data-balloon-pos="up"]:hover:after, [data-balloon][data-balloon-pos="up"][data-balloon-visible]:after {
106
+ -webkit-transform: translate(-50%, 0);
107
+ -moz-transform: translate(-50%, 0);
108
+ -ms-transform: translate(-50%, 0);
109
+ transform: translate(-50%, 0); }
110
+ [data-balloon][data-balloon-pos="up"]:hover:before, [data-balloon][data-balloon-pos="up"][data-balloon-visible]:before {
111
+ -webkit-transform: translate(-50%, 0);
112
+ -moz-transform: translate(-50%, 0);
113
+ -ms-transform: translate(-50%, 0);
114
+ transform: translate(-50%, 0); }
115
+ [data-balloon][data-balloon-pos="up-left"]:after {
116
+ bottom: 100%;
117
+ left: 0;
118
+ margin-bottom: 11px;
119
+ -webkit-transform: translate(0, 10px);
120
+ -moz-transform: translate(0, 10px);
121
+ -ms-transform: translate(0, 10px);
122
+ transform: translate(0, 10px);
123
+ -webkit-transform-origin: top;
124
+ -moz-transform-origin: top;
125
+ -ms-transform-origin: top;
126
+ transform-origin: top; }
127
+ [data-balloon][data-balloon-pos="up-left"]:before {
128
+ bottom: 100%;
129
+ left: 5px;
130
+ margin-bottom: 5px;
131
+ -webkit-transform: translate(0, 10px);
132
+ -moz-transform: translate(0, 10px);
133
+ -ms-transform: translate(0, 10px);
134
+ transform: translate(0, 10px);
135
+ -webkit-transform-origin: top;
136
+ -moz-transform-origin: top;
137
+ -ms-transform-origin: top;
138
+ transform-origin: top; }
139
+ [data-balloon][data-balloon-pos="up-left"]:hover:after, [data-balloon][data-balloon-pos="up-left"][data-balloon-visible]:after {
140
+ -webkit-transform: translate(0, 0);
141
+ -moz-transform: translate(0, 0);
142
+ -ms-transform: translate(0, 0);
143
+ transform: translate(0, 0); }
144
+ [data-balloon][data-balloon-pos="up-left"]:hover:before, [data-balloon][data-balloon-pos="up-left"][data-balloon-visible]:before {
145
+ -webkit-transform: translate(0, 0);
146
+ -moz-transform: translate(0, 0);
147
+ -ms-transform: translate(0, 0);
148
+ transform: translate(0, 0); }
149
+ [data-balloon][data-balloon-pos="up-right"]:after {
150
+ bottom: 100%;
151
+ right: 0;
152
+ margin-bottom: 11px;
153
+ -webkit-transform: translate(0, 10px);
154
+ -moz-transform: translate(0, 10px);
155
+ -ms-transform: translate(0, 10px);
156
+ transform: translate(0, 10px);
157
+ -webkit-transform-origin: top;
158
+ -moz-transform-origin: top;
159
+ -ms-transform-origin: top;
160
+ transform-origin: top; }
161
+ [data-balloon][data-balloon-pos="up-right"]:before {
162
+ bottom: 100%;
163
+ right: 5px;
164
+ margin-bottom: 5px;
165
+ -webkit-transform: translate(0, 10px);
166
+ -moz-transform: translate(0, 10px);
167
+ -ms-transform: translate(0, 10px);
168
+ transform: translate(0, 10px);
169
+ -webkit-transform-origin: top;
170
+ -moz-transform-origin: top;
171
+ -ms-transform-origin: top;
172
+ transform-origin: top; }
173
+ [data-balloon][data-balloon-pos="up-right"]:hover:after, [data-balloon][data-balloon-pos="up-right"][data-balloon-visible]:after {
174
+ -webkit-transform: translate(0, 0);
175
+ -moz-transform: translate(0, 0);
176
+ -ms-transform: translate(0, 0);
177
+ transform: translate(0, 0); }
178
+ [data-balloon][data-balloon-pos="up-right"]:hover:before, [data-balloon][data-balloon-pos="up-right"][data-balloon-visible]:before {
179
+ -webkit-transform: translate(0, 0);
180
+ -moz-transform: translate(0, 0);
181
+ -ms-transform: translate(0, 0);
182
+ transform: translate(0, 0); }
183
+ [data-balloon][data-balloon-pos='down']:after {
184
+ left: 50%;
185
+ margin-top: 11px;
186
+ top: 100%;
187
+ -webkit-transform: translate(-50%, -10px);
188
+ -moz-transform: translate(-50%, -10px);
189
+ -ms-transform: translate(-50%, -10px);
190
+ transform: translate(-50%, -10px); }
191
+ [data-balloon][data-balloon-pos='down']:before {
192
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
193
+ background-size: 100% auto;
194
+ width: 18px;
195
+ height: 6px;
196
+ left: 50%;
197
+ margin-top: 5px;
198
+ top: 100%;
199
+ -webkit-transform: translate(-50%, -10px);
200
+ -moz-transform: translate(-50%, -10px);
201
+ -ms-transform: translate(-50%, -10px);
202
+ transform: translate(-50%, -10px); }
203
+ [data-balloon][data-balloon-pos='down']:hover:after, [data-balloon][data-balloon-pos='down'][data-balloon-visible]:after {
204
+ -webkit-transform: translate(-50%, 0);
205
+ -moz-transform: translate(-50%, 0);
206
+ -ms-transform: translate(-50%, 0);
207
+ transform: translate(-50%, 0); }
208
+ [data-balloon][data-balloon-pos='down']:hover:before, [data-balloon][data-balloon-pos='down'][data-balloon-visible]:before {
209
+ -webkit-transform: translate(-50%, 0);
210
+ -moz-transform: translate(-50%, 0);
211
+ -ms-transform: translate(-50%, 0);
212
+ transform: translate(-50%, 0); }
213
+ [data-balloon][data-balloon-pos='down-left']:after {
214
+ left: 0;
215
+ margin-top: 11px;
216
+ top: 100%;
217
+ -webkit-transform: translate(0, -10px);
218
+ -moz-transform: translate(0, -10px);
219
+ -ms-transform: translate(0, -10px);
220
+ transform: translate(0, -10px); }
221
+ [data-balloon][data-balloon-pos='down-left']:before {
222
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
223
+ background-size: 100% auto;
224
+ width: 18px;
225
+ height: 6px;
226
+ left: 5px;
227
+ margin-top: 5px;
228
+ top: 100%;
229
+ -webkit-transform: translate(0, -10px);
230
+ -moz-transform: translate(0, -10px);
231
+ -ms-transform: translate(0, -10px);
232
+ transform: translate(0, -10px); }
233
+ [data-balloon][data-balloon-pos='down-left']:hover:after, [data-balloon][data-balloon-pos='down-left'][data-balloon-visible]:after {
234
+ -webkit-transform: translate(0, 0);
235
+ -moz-transform: translate(0, 0);
236
+ -ms-transform: translate(0, 0);
237
+ transform: translate(0, 0); }
238
+ [data-balloon][data-balloon-pos='down-left']:hover:before, [data-balloon][data-balloon-pos='down-left'][data-balloon-visible]:before {
239
+ -webkit-transform: translate(0, 0);
240
+ -moz-transform: translate(0, 0);
241
+ -ms-transform: translate(0, 0);
242
+ transform: translate(0, 0); }
243
+ [data-balloon][data-balloon-pos='down-right']:after {
244
+ right: 0;
245
+ margin-top: 11px;
246
+ top: 100%;
247
+ -webkit-transform: translate(0, -10px);
248
+ -moz-transform: translate(0, -10px);
249
+ -ms-transform: translate(0, -10px);
250
+ transform: translate(0, -10px); }
251
+ [data-balloon][data-balloon-pos='down-right']:before {
252
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2236px%22%20height%3D%2212px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(180 18 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
253
+ background-size: 100% auto;
254
+ width: 18px;
255
+ height: 6px;
256
+ right: 5px;
257
+ margin-top: 5px;
258
+ top: 100%;
259
+ -webkit-transform: translate(0, -10px);
260
+ -moz-transform: translate(0, -10px);
261
+ -ms-transform: translate(0, -10px);
262
+ transform: translate(0, -10px); }
263
+ [data-balloon][data-balloon-pos='down-right']:hover:after, [data-balloon][data-balloon-pos='down-right'][data-balloon-visible]:after {
264
+ -webkit-transform: translate(0, 0);
265
+ -moz-transform: translate(0, 0);
266
+ -ms-transform: translate(0, 0);
267
+ transform: translate(0, 0); }
268
+ [data-balloon][data-balloon-pos='down-right']:hover:before, [data-balloon][data-balloon-pos='down-right'][data-balloon-visible]:before {
269
+ -webkit-transform: translate(0, 0);
270
+ -moz-transform: translate(0, 0);
271
+ -ms-transform: translate(0, 0);
272
+ transform: translate(0, 0); }
273
+ [data-balloon][data-balloon-pos='left']:after {
274
+ margin-right: 11px;
275
+ right: 100%;
276
+ top: 50%;
277
+ -webkit-transform: translate(10px, -50%);
278
+ -moz-transform: translate(10px, -50%);
279
+ -ms-transform: translate(10px, -50%);
280
+ transform: translate(10px, -50%); }
281
+ [data-balloon][data-balloon-pos='left']:before {
282
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(-90 18 18)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
283
+ background-size: 100% auto;
284
+ width: 6px;
285
+ height: 18px;
286
+ margin-right: 5px;
287
+ right: 100%;
288
+ top: 50%;
289
+ -webkit-transform: translate(10px, -50%);
290
+ -moz-transform: translate(10px, -50%);
291
+ -ms-transform: translate(10px, -50%);
292
+ transform: translate(10px, -50%); }
293
+ [data-balloon][data-balloon-pos='left']:hover:after, [data-balloon][data-balloon-pos='left'][data-balloon-visible]:after {
294
+ -webkit-transform: translate(0, -50%);
295
+ -moz-transform: translate(0, -50%);
296
+ -ms-transform: translate(0, -50%);
297
+ transform: translate(0, -50%); }
298
+ [data-balloon][data-balloon-pos='left']:hover:before, [data-balloon][data-balloon-pos='left'][data-balloon-visible]:before {
299
+ -webkit-transform: translate(0, -50%);
300
+ -moz-transform: translate(0, -50%);
301
+ -ms-transform: translate(0, -50%);
302
+ transform: translate(0, -50%); }
303
+ [data-balloon][data-balloon-pos='right']:after {
304
+ left: 100%;
305
+ margin-left: 11px;
306
+ top: 50%;
307
+ -webkit-transform: translate(-10px, -50%);
308
+ -moz-transform: translate(-10px, -50%);
309
+ -ms-transform: translate(-10px, -50%);
310
+ transform: translate(-10px, -50%); }
311
+ [data-balloon][data-balloon-pos='right']:before {
312
+ background: no-repeat url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http://www.w3.org/2000/svg%22%20width%3D%2212px%22%20height%3D%2236px%22%3E%3Cpath%20fill%3D%22rgba(17, 17, 17, 0.9)%22%20transform%3D%22rotate(90 6 6)%22%20d%3D%22M2.658,0.000%20C-13.615,0.000%2050.938,0.000%2034.662,0.000%20C28.662,0.000%2023.035,12.002%2018.660,12.002%20C14.285,12.002%208.594,0.000%202.658,0.000%20Z%22/%3E%3C/svg%3E");
313
+ background-size: 100% auto;
314
+ width: 6px;
315
+ height: 18px;
316
+ left: 100%;
317
+ margin-left: 5px;
318
+ top: 50%;
319
+ -webkit-transform: translate(-10px, -50%);
320
+ -moz-transform: translate(-10px, -50%);
321
+ -ms-transform: translate(-10px, -50%);
322
+ transform: translate(-10px, -50%); }
323
+ [data-balloon][data-balloon-pos='right']:hover:after, [data-balloon][data-balloon-pos='right'][data-balloon-visible]:after {
324
+ -webkit-transform: translate(0, -50%);
325
+ -moz-transform: translate(0, -50%);
326
+ -ms-transform: translate(0, -50%);
327
+ transform: translate(0, -50%); }
328
+ [data-balloon][data-balloon-pos='right']:hover:before, [data-balloon][data-balloon-pos='right'][data-balloon-visible]:before {
329
+ -webkit-transform: translate(0, -50%);
330
+ -moz-transform: translate(0, -50%);
331
+ -ms-transform: translate(0, -50%);
332
+ transform: translate(0, -50%); }
333
+ [data-balloon][data-balloon-length='small']:after {
334
+ white-space: normal;
335
+ width: 80px; }
336
+ [data-balloon][data-balloon-length='medium']:after {
337
+ white-space: normal;
338
+ width: 150px; }
339
+ [data-balloon][data-balloon-length='large']:after {
340
+ white-space: normal;
341
+ width: 260px; }
342
+ [data-balloon][data-balloon-length='xlarge']:after {
343
+ white-space: normal;
344
+ width: 380px; }
345
+ @media screen and (max-width: 768px) {
346
+ [data-balloon][data-balloon-length='xlarge']:after {
347
+ white-space: normal;
348
+ width: 90vw; } }
349
+ [data-balloon][data-balloon-length='fit']:after {
350
+ white-space: normal;
351
+ width: 100%; }
@@ -7,14 +7,72 @@ module Renalware
7
7
  class WardsController < BaseController
8
8
  def index
9
9
  authorize Ward, :index?
10
- unit = Unit.find(params[:unit_id])
11
- wards = Ward.where(hospital_unit_id: unit.id).order(name: :asc).select(:id, :name)
10
+ wards = Ward.where(hospital_unit_id: unit.id).order(name: :asc)
12
11
  respond_to do |format|
13
12
  format.json do
14
- render json: wards.to_json
13
+ render json: wards.select(:id, :name).to_json
15
14
  end
15
+ format.html do
16
+ render locals: { unit: unit, wards: wards }
17
+ end
18
+ end
19
+ end
20
+
21
+ def new
22
+ ward = unit.wards.build
23
+ authorize ward
24
+ render_new(ward)
25
+ end
26
+
27
+ def create
28
+ ward = unit.wards.build(ward_params)
29
+ authorize ward
30
+ if ward.save
31
+ redirect_to hospitals_unit_wards_path(unit), notice: success_msg_for(:ward)
32
+ else
33
+ render_new(ward)
16
34
  end
17
35
  end
36
+
37
+ def edit
38
+ render_edit(find_an_authorise_ward)
39
+ end
40
+
41
+ def update
42
+ ward = find_an_authorise_ward
43
+ if ward.update(ward_params)
44
+ redirect_to hospitals_unit_wards_path(unit), notice: success_msg_for(:ward)
45
+ else
46
+ render_edit(find_an_authorise_ward)
47
+ end
48
+ end
49
+
50
+ def destroy
51
+ find_an_authorise_ward.destroy!
52
+ redirect_to hospitals_unit_wards_path(unit), notice: success_msg_for(:ward)
53
+ end
54
+
55
+ private
56
+
57
+ def render_new(ward)
58
+ render :new, locals: { ward: ward }
59
+ end
60
+
61
+ def render_edit(ward)
62
+ render :edit, locals: { ward: ward }
63
+ end
64
+
65
+ def unit
66
+ @unit ||= Unit.find(params[:unit_id])
67
+ end
68
+
69
+ def find_an_authorise_ward
70
+ unit.wards.find(params[:id]).tap{ |ward| authorize(ward) }
71
+ end
72
+
73
+ def ward_params
74
+ params.require(:ward).permit(:code, :name)
75
+ end
18
76
  end
19
77
  end
20
78
  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
+ protect_from_forgery except: [:has_user_timed_out, :reset_user_clock]
16
17
 
17
18
  # Note this action will NOT update the session activity (thus keeping the session alive)
18
19
  # because we invoke #skip_timeout at the beginning of the filter chain.
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Renalware
4
+ module System
5
+ class MessagesController < BaseController
6
+ def index
7
+ messages = Message.all.order(created_at: :desc)
8
+ authorize messages
9
+ render locals: { messages: messages }
10
+ end
11
+
12
+ def new
13
+ message = System::Message.new
14
+ authorize message
15
+ render_new(message)
16
+ end
17
+
18
+ def create
19
+ message = System::Message.new(message_params)
20
+ authorize message
21
+ if message.save
22
+ redirect_to system_messages_path
23
+ else
24
+ render_new(message)
25
+ end
26
+ end
27
+
28
+ def edit
29
+ render_edit(find_and_authorise_message)
30
+ end
31
+
32
+ def update
33
+ message = find_and_authorise_message
34
+ if message.update(message_params)
35
+ redirect_to system_messages_path
36
+ else
37
+ render_edit(message)
38
+ end
39
+ end
40
+
41
+ def destroy
42
+ find_and_authorise_message.destroy!
43
+ redirect_to system_messages_path
44
+ end
45
+
46
+ private
47
+
48
+ def render_new(message)
49
+ render :new, locals: { message: message }
50
+ end
51
+
52
+ def render_edit(message)
53
+ render :edit, locals: { message: message }
54
+ end
55
+
56
+ def message_params
57
+ params
58
+ .require(:message)
59
+ .permit(:title, :body, :severity, :message_type, :display_from, :display_until)
60
+ end
61
+
62
+ def find_and_authorise_message
63
+ message = Message.find(params[:id])
64
+ authorize message
65
+ message
66
+ end
67
+ end
68
+ end
69
+ end
@@ -80,8 +80,8 @@ module Renalware
80
80
 
81
81
  def full_name_sql
82
82
  <<-SQL.squish
83
- family_name ILIKE :family_name AND
84
- given_name ILIKE :given_name
83
+ patients.family_name ILIKE :family_name AND
84
+ patients.given_name ILIKE :given_name
85
85
  SQL
86
86
  end
87
87
  end
@@ -21,14 +21,14 @@ module Renalware
21
21
  # It might be better to refactor PatientsRansackHelper so we can include where required
22
22
  # eg below using .extending(PatientsRansackHelper) rather than relying on it being in
23
23
  # included in the model file.
24
- # rubocop:disable Metrics/MethodLength
24
+ # note that adding .includes(:created_by) her creates an ambigous column
25
+ # 'family_name' error
25
26
  def search
26
27
  @search ||= begin
27
28
  Consult
28
29
  .joins(:patient)
29
30
  .eager_load(patient: [current_modality: :description])
30
31
  .includes(
31
- :created_by,
32
32
  :consult_site,
33
33
  :hospital_ward,
34
34
  patient: { current_modality: :description }
@@ -37,7 +37,6 @@ module Renalware
37
37
  .ransack(query)
38
38
  end
39
39
  end
40
- # rubocop:enable Metrics/MethodLength
41
40
  end
42
41
  end
43
42
  end