Package Gnumed :: Package business :: Module gmSurgery
[frames] | no frames]

Source Code for Module Gnumed.business.gmSurgery

  1  """GNUmed Surgery related middleware.""" 
  2  #============================================================ 
  3  # $Source: /home/ncq/Projekte/cvs2git/vcs-mirror/gnumed/gnumed/client/business/gmSurgery.py,v $ 
  4  # $Id: gmSurgery.py,v 1.14 2009-07-23 20:03:36 ncq Exp $ 
  5  __license__ = "GPL" 
  6  __version__ = "$Revision: 1.14 $" 
  7  __author__ = "K.Hilbert <Karsten.Hilbert@gmx.net>" 
  8   
  9   
 10  import sys, os 
 11   
 12   
 13  if __name__ == '__main__': 
 14          sys.path.insert(0, '../../') 
 15  from Gnumed.pycommon import gmPG2, gmTools, gmBorg, gmCfg2 
 16   
 17  _cfg = gmCfg2.gmCfgData() 
 18  #============================================================ 
19 -def delete_workplace(workplace=None, delete_config=False, conn=None):
20 21 args = {'wp': workplace} 22 23 # delete workplace itself (plugin load list, that is) 24 queries = [ 25 {'cmd': u""" 26 delete from cfg.cfg_item 27 where 28 fk_template = ( 29 select pk 30 from cfg.cfg_template 31 where name = 'horstspace.notebook.plugin_load_order' 32 ) 33 and 34 workplace = %(wp)s""", 35 'args': args 36 } 37 ] 38 39 # delete other config items associated with this workplace 40 if delete_config: 41 queries.append ({ 42 'cmd': u""" 43 delete from cfg.cfg_item 44 where 45 workplace = %(wp)s""", 46 'args': args 47 }) 48 49 gmPG2.run_rw_queries(link_obj = conn, queries = queries, end_tx = True)
50 #============================================================
51 -class gmCurrentPractice(gmBorg.cBorg):
52
53 - def __init__(self):
54 try: 55 self.already_inited 56 return 57 except AttributeError: 58 pass 59 60 self.__helpdesk = None 61 self.__active_workplace = None 62 63 self.already_inited = True
64 #-------------------------------------------------------- 65 # waiting list handling 66 #--------------------------------------------------------
67 - def remove_from_waiting_list(self, pk=None):
68 cmd = u'delete from clin.waiting_list where pk = %(pk)s' 69 args = {'pk': pk} 70 gmPG2.run_rw_queries(queries = [{'cmd': cmd, 'args': args}])
71 #--------------------------------------------------------
72 - def update_in_waiting_list(self, pk = None, urgency = 0, comment = None, zone = None):
73 cmd = u""" 74 update clin.waiting_list 75 set 76 urgency = %(urg)s, 77 comment = %(cmt)s, 78 area = %(zone)s 79 where 80 pk = %(pk)s""" 81 args = { 82 'pk': pk, 83 'urg': urgency, 84 'cmt': gmTools.none_if(comment, u''), 85 'zone': gmTools.none_if(zone, u'') 86 } 87 88 gmPG2.run_rw_queries(queries = [{'cmd': cmd, 'args': args}])
89 #--------------------------------------------------------
90 - def raise_in_waiting_list(self, current_position=None):
91 if current_position == 1: 92 return 93 94 cmd = u'select clin.move_waiting_list_entry(%(pos)s, (%(pos)s - 1))' 95 args = {'pos': current_position} 96 97 gmPG2.run_rw_queries(queries = [{'cmd': cmd, 'args': args}])
98 #--------------------------------------------------------
99 - def lower_in_waiting_list(self, current_position=None):
100 cmd = u'select clin.move_waiting_list_entry(%(pos)s, (%(pos)s+1))' 101 args = {'pos': current_position} 102 103 gmPG2.run_rw_queries(queries = [{'cmd': cmd, 'args': args}])
104 #-------------------------------------------------------- 105 # properties 106 #--------------------------------------------------------
108 cmd = u'select * from clin.v_waiting_list order by list_position' 109 rows, idx = gmPG2.run_ro_queries ( 110 queries = [{'cmd': cmd}], 111 get_col_idx = False 112 ) 113 return rows
114 115 waiting_list_patients = property (_get_waiting_list_patients, lambda x:x) 116 #--------------------------------------------------------
117 - def _set_helpdesk(self, helpdesk):
118 return
119
120 - def _get_helpdesk(self):
121 122 if self.__helpdesk is not None: 123 return self.__helpdesk 124 125 self.__helpdesk = gmTools.coalesce ( 126 _cfg.get ( 127 group = u'workplace', 128 option = u'help desk', 129 source_order = [ 130 ('explicit', 'return'), 131 ('workbase', 'return'), 132 ('local', 'return'), 133 ('user', 'return'), 134 ('system', 'return') 135 ] 136 ), 137 u'http://wiki.gnumed.de' 138 ) 139 140 return self.__helpdesk
141 142 helpdesk = property(_get_helpdesk, _set_helpdesk) 143 #--------------------------------------------------------
144 - def _get_db_logon_banner(self):
145 rows, idx = gmPG2.run_ro_queries(queries = [{'cmd': u'select _(message) from cfg.db_logon_banner'}]) 146 if len(rows) == 0: 147 return u'' 148 return gmTools.coalesce(rows[0][0], u'').strip()
149
150 - def _set_db_logon_banner(self, banner):
151 queries = [ 152 {'cmd': u'delete from cfg.db_logon_banner'} 153 ] 154 if banner.strip() != u'': 155 queries.append ({ 156 'cmd': u'insert into cfg.db_logon_banner (message) values (%(msg)s)', 157 'args': {'msg': banner.strip()} 158 }) 159 rows, idx = gmPG2.run_rw_queries(queries = queries, end_tx = True)
160 161 db_logon_banner = property(_get_db_logon_banner, _set_db_logon_banner) 162 #--------------------------------------------------------
163 - def _set_workplace(self, workplace):
164 # maybe later allow switching workplaces on the fly 165 return True
166
167 - def _get_workplace(self):
168 """Return the current workplace (client profile) definition. 169 170 The first occurrence counts. 171 """ 172 if self.__active_workplace is not None: 173 return self.__active_workplace 174 175 self.__active_workplace = gmTools.coalesce ( 176 _cfg.get ( 177 group = u'workplace', 178 option = u'name', 179 source_order = [ 180 ('explicit', 'return'), 181 ('workbase', 'return'), 182 ('local', 'return'), 183 ('user', 'return'), 184 ('system', 'return'), 185 ] 186 ), 187 u'Local Default' 188 ) 189 190 return self.__active_workplace
191 192 active_workplace = property(_get_workplace, _set_workplace) 193 #--------------------------------------------------------
194 - def _set_workplaces(self, val):
195 pass
196
197 - def _get_workplaces(self):
198 rows, idx = gmPG2.run_ro_queries(queries = [{'cmd': u'select distinct workplace from cfg.cfg_item'}]) 199 return [ r[0] for r in rows ]
200 201 workplaces = property(_get_workplaces, _set_workplaces) 202 #--------------------------------------------------------
203 - def _get_user_email(self):
204 # FIXME: get this from the current users staff record in the database 205 return _cfg.get ( 206 group = u'preferences', 207 option = u'user email', 208 source_order = [ 209 ('explicit', 'return'), 210 ('user', 'return'), 211 ('local', 'return'), 212 ('workbase', 'return'), 213 ('system', 'return') 214 ] 215 )
216
217 - def _set_user_email(self, val):
218 prefs_file = _cfg.get(option = 'user_preferences_file') 219 gmCfg2.set_option_in_INI_file ( 220 filename = prefs_file, 221 group = u'preferences', 222 option = u'user email', 223 value = val 224 ) 225 _cfg.reload_file_source(file = prefs_file)
226 227 user_email = property(_get_user_email, _set_user_email)
228 #============================================================ 229 if __name__ == '__main__': 230
231 - def run_tests():
232 prac = gmCurrentPractice() 233 # print "help desk:", prac.helpdesk 234 # print "active workplace:", prac.active_workplace 235 236 old_banner = prac.db_logon_banner 237 test_banner = u'a test banner' 238 prac.db_logon_banner = test_banner 239 if prac.db_logon_banner != test_banner: 240 print 'Cannot set logon banner to', test_banner 241 return False 242 prac.db_logon_banner = u'' 243 if prac.db_logon_banner != u'': 244 print 'Cannot set logon banner to ""' 245 return False 246 prac.db_logon_banner = old_banner 247 248 return True
249 250 if len(sys.argv) > 1 and sys.argv[1] == 'test': 251 if not run_tests(): 252 print "regression tests failed" 253 print "regression tests succeeded" 254 255 #============================================================ 256 # $Log: gmSurgery.py,v $ 257 # Revision 1.14 2009-07-23 20:03:36 ncq 258 # - make "Local Default" the built-in default workplace 259 # 260 # Revision 1.13 2009/05/18 15:30:45 ncq 261 # - delete_workplace 262 # 263 # Revision 1.12 2009/02/04 12:28:44 ncq 264 # - update in waiting list 265 # 266 # Revision 1.11 2009/01/22 11:15:55 ncq 267 # - move entries in waiting list 268 # 269 # Revision 1.10 2009/01/17 23:01:18 ncq 270 # - waiting list handling 271 # 272 # Revision 1.9 2008/07/16 10:32:50 ncq 273 # - add .user_email property 274 # 275 # Revision 1.8 2007/12/23 11:55:49 ncq 276 # - cleanup, use gmCfg2 277 # 278 # Revision 1.7 2007/10/23 21:20:24 ncq 279 # - cleanup 280 # 281 # Revision 1.6 2007/10/21 20:16:29 ncq 282 # - fix setting db logon banner 283 # - add test suite 284 # 285 # Revision 1.5 2007/10/07 12:28:09 ncq 286 # - workplace property now on gmSurgery.gmCurrentPractice() borg 287 # 288 # Revision 1.4 2007/09/20 21:29:38 ncq 289 # - add db_logon_banner handling 290 # 291 # Revision 1.3 2007/08/07 21:34:19 ncq 292 # - cPaths -> gmPaths 293 # 294 # Revision 1.2 2007/05/11 14:11:20 ncq 295 # - add gmCurrentPractice borg 296 # 297 # Revision 1.1 2007/04/07 23:00:01 ncq 298 # - Medical Practice (Surgery) related stuff 299 # 300 # 301