renalware-core 2.0.25 → 2.0.26

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