1
2 """GNUmed provider inbox middleware.
3
4 This should eventually end up in a class cPractice.
5 """
6
7 __license__ = "GPL"
8 __version__ = "$Revision: 1.14 $"
9 __author__ = "K.Hilbert <Karsten.Hilbert@gmx.net>"
10
11
12 import sys
13
14
15 if __name__ == '__main__':
16 sys.path.insert(0, '../../')
17 from Gnumed.pycommon import gmPG2
18 from Gnumed.pycommon import gmBusinessDBObject
19 from Gnumed.pycommon import gmTools
20 from Gnumed.pycommon import gmDateTime
21
22 from Gnumed.business import gmStaff
23
24
25
26
27 _SQL_get_inbox_messages = u"SELECT * FROM dem.v_message_inbox WHERE %s"
28
30
31 _cmd_fetch_payload = _SQL_get_inbox_messages % u"pk_inbox_message = %s"
32 _cmds_store_payload = [
33 u"""
34 UPDATE dem.message_inbox SET
35 fk_staff = %(pk_staff)s,
36 fk_inbox_item_type = %(pk_type)s,
37 comment = gm.nullify_empty_string(%(comment)s),
38 data = gm.nullify_empty_string(%(data)s),
39 importance = %(importance)s,
40 fk_patient = %(pk_patient)s,
41 ufk_context = %(pk_context)s
42 WHERE
43 pk = %(pk_inbox_message)s
44 AND
45 xmin = %(xmin_message_inbox)s
46 RETURNING
47 pk as pk_inbox_message,
48 xmin as xmin_message_inbox
49 """
50 ]
51 _updatable_fields = [
52 u'pk_staff',
53 u'pk_type',
54 u'comment',
55 u'data',
56 u'importance',
57 u'pk_patient',
58 u'ufk_context'
59 ]
60
101
102 -def get_inbox_messages(pk_staff=None, pk_patient=None, include_without_provider=False, order_by=None):
103
104 if order_by is None:
105 order_by = u'%s ORDER BY importance desc, received_when desc'
106 else:
107 order_by = u'%%s ORDER BY %s' % order_by
108
109 args = {}
110 where_parts = []
111
112 if pk_staff is not None:
113 if include_without_provider:
114 where_parts.append(u'pk_staff in (%(staff)s, NULL)')
115 else:
116 where_parts.append(u'pk_staff = %(staff)s')
117 args['staff'] = pk_staff
118
119 if pk_patient is not None:
120 where_parts.append(u'pk_patient = %(pat)s')
121 args['pat'] = pk_patient
122
123 cmd = _SQL_get_inbox_messages % (
124 order_by % u' AND '.join(where_parts)
125 )
126 rows, idx = gmPG2.run_ro_queries(queries = [{'cmd': cmd, 'args': args}], get_col_idx = True)
127
128 return [ cInboxMessage(row = {'data': r, 'idx': idx, 'pk_field': 'pk_inbox_message'}) for r in rows ]
129
131
132 success, pk_type = gmTools.input2int(initial = message_type)
133 if not success:
134 pk_type = create_inbox_item_type(message_type = message_type)
135
136 cmd = u"""
137 INSERT INTO dem.message_inbox (
138 fk_staff,
139 fk_patient,
140 fk_inbox_item_type,
141 comment
142 ) VALUES (
143 %(staff)s,
144 %(pat)s,
145 %(type)s,
146 gm.nullify_empty_string(%(subject)s)
147 )
148 RETURNING pk
149 """
150 args = {
151 u'staff': staff,
152 u'pat': patient,
153 u'type': pk_type,
154 u'subject': subject
155 }
156 rows, idx = gmPG2.run_rw_queries(queries = [{'cmd': cmd, 'args': args}], return_data = True, get_col_idx = False)
157
158 return cInboxMessage(aPK_obj = rows[0]['pk'])
159
161 args = {'pk': inbox_message}
162 cmd = u"DELETE FROM dem.message_inbox WHERE pk = %(pk)s"
163 gmPG2.run_rw_queries(queries = [{'cmd': cmd, 'args': args}])
164 return True
165
167
168
169 success, pk_cat = gmTools.input2int(initial = category)
170 if not success:
171 args = {u'cat': category}
172 cmd = u"""SELECT COALESCE (
173 (SELECT pk FROM dem.inbox_item_category WHERE _(description) = %(cat)s),
174 (SELECT pk FROM dem.inbox_item_category WHERE description = %(cat)s)
175 ) AS pk"""
176 rows, idx = gmPG2.run_ro_queries(queries = [{'cmd': cmd, 'args': args}])
177 if rows[0]['pk'] is None:
178 cmd = u"INSERT INTO dem.inbox_item_category (description) VALUES (%(cat)s) RETURNING pk"
179 rows, idx = gmPG2.run_rw_queries(queries = [{'cmd': cmd, 'args': args}], return_data = True)
180 pk_cat = rows[0]['pk']
181 else:
182 pk_cat = rows[0]['pk']
183
184
185 args = {u'cat': pk_cat, u'type': message_type}
186 cmd = u"""SELECT COALESCE (
187 (SELECT pk FROM dem.inbox_item_type where fk_inbox_item_category = %(cat)s and _(description) = %(type)s),
188 (SELECT pk FROM dem.inbox_item_type where fk_inbox_item_category = %(cat)s and description = %(type)s)
189 ) AS pk"""
190 rows, idx = gmPG2.run_ro_queries(queries = [{'cmd': cmd, 'args': args}])
191 if rows[0]['pk'] is None:
192 cmd = u"""
193 INSERT INTO dem.inbox_item_type (
194 fk_inbox_item_category,
195 description,
196 is_user
197 ) VALUES (
198 %(cat)s,
199 %(type)s,
200 TRUE
201 ) RETURNING pk"""
202 rows, idx = gmPG2.run_rw_queries(queries = [{'cmd': cmd, 'args': args}], return_data = True)
203
204 return rows[0]['pk']
205
206
234
235 if __name__ == '__main__':
236
237 if len(sys.argv) < 2:
238 sys.exit()
239
240 if sys.argv[1] != 'test':
241 sys.exit()
242
243 from Gnumed.pycommon import gmI18N
244
245 gmI18N.activate_locale()
246 gmI18N.install_domain()
247
248
254
258
261
262
263
264 test_create_type()
265
266
267