Package Gnumed :: Package wxpython :: Module gmExternalCareWidgets
[frames] | no frames]

Source Code for Module Gnumed.wxpython.gmExternalCareWidgets

  1  """GNUmed external patient care widgets.""" 
  2  #================================================================ 
  3  __author__ = "Karsten.Hilbert@gmx.net" 
  4  __license__ = "GPL v2 or later" 
  5   
  6  # std lib 
  7  import sys 
  8  import logging 
  9   
 10   
 11  # 3rd party 
 12  import wx 
 13   
 14   
 15  # GNUmed libs 
 16  if __name__ == '__main__': 
 17          sys.path.insert(0, '../../') 
 18   
 19  from Gnumed.pycommon import gmTools 
 20  from Gnumed.pycommon import gmDispatcher 
 21   
 22  from Gnumed.business import gmExternalCare 
 23  from Gnumed.business import gmPerson 
 24   
 25  from Gnumed.wxpython import gmListWidgets 
 26  from Gnumed.wxpython import gmEditArea 
 27  from Gnumed.wxpython import gmGuiHelpers 
 28   
 29   
 30  _log = logging.getLogger('gm.ui') 
 31   
 32  #============================================================ 
33 -def manage_external_care(parent=None):
34 35 pat = gmPerson.gmCurrentPatient() 36 emr = pat.emr 37 38 if parent is None: 39 parent = wx.GetApp().GetTopWindow() 40 41 #----------------------------------------- 42 def edit(external_care_item=None): 43 return edit_external_care_item(parent = parent, external_care_item = external_care_item)
44 45 #----------------------------------------- 46 def delete(external_care_item=None): 47 if gmExternalCare.delete_external_care_item(pk_external_care = external_care_item['pk_external_care']): 48 return True 49 50 gmDispatcher.send ( 51 signal = 'statustext', 52 msg = _('Cannot delete external care item.'), 53 beep = True 54 ) 55 return False 56 57 #------------------------------------------------------------ 58 def get_tooltip(data): 59 if data is None: 60 return None 61 return '\n'.join(data.format(with_health_issue = True, with_address = True, with_comms = True)) 62 63 #------------------------------------------------------------ 64 def refresh(lctrl): 65 care = emr.get_external_care_items(order_by = 'inactive, issue, provider, unit, organization') 66 items = [ [ 67 '%s @ %s' % ( 68 c['unit'], 69 c['organization'] 70 ), 71 gmTools.coalesce(c['provider'], ''), 72 c['issue'], 73 gmTools.bool2subst(c['inactive'], _('inactive'), '', '<ERROR: .inactive IS NULL>'), 74 gmTools.coalesce(c['comment'], '') 75 ] for c in care ] 76 lctrl.set_string_items(items) 77 lctrl.set_data(care) 78 79 #------------------------------------------------------------ 80 return gmListWidgets.get_choices_from_list ( 81 parent = parent, 82 msg = _('External care of this patient.'), 83 caption = _('Showing external care network.'), 84 columns = [ _('Location'), _('Provider'), _('Reason for care'), _('Status'), _('Comment') ], 85 single_selection = False, 86 can_return_empty = True, 87 ignore_OK_button = False, 88 refresh_callback = refresh, 89 edit_callback = edit, 90 new_callback = edit, 91 delete_callback = delete, 92 list_tooltip_callback = get_tooltip 93 # left_extra_button=None, # manage orgs 94 # middle_extra_button=None, # manage issues 95 # right_extra_button=None 96 ) 97 98 #----------------------------------------------------------------
99 -def edit_external_care_item(parent=None, external_care_item=None):
100 ea = cExternalCareEAPnl(parent, -1) 101 ea.data = external_care_item 102 ea.mode = gmTools.coalesce(external_care_item, 'new', 'edit') 103 dlg = gmEditArea.cGenericEditAreaDlg2(parent, -1, edit_area = ea, single_entry = True) 104 dlg.SetTitle(gmTools.coalesce(external_care_item, _('Adding external care'), _('Editing external care'))) 105 if dlg.ShowModal() == wx.ID_OK: 106 dlg.Destroy() 107 return True 108 dlg.Destroy() 109 return False
110 111 #==================================================================== 112 from Gnumed.wxGladeWidgets import wxgExternalCareEAPnl 113
114 -class cExternalCareEAPnl(wxgExternalCareEAPnl.wxgExternalCareEAPnl, gmEditArea.cGenericEditAreaMixin):
115
116 - def __init__(self, *args, **kwargs):
117 118 try: 119 data = kwargs['care'] 120 del kwargs['care'] 121 except KeyError: 122 data = None 123 124 wxgExternalCareEAPnl.wxgExternalCareEAPnl.__init__(self, *args, **kwargs) 125 gmEditArea.cGenericEditAreaMixin.__init__(self) 126 127 self.mode = 'new' 128 self.data = data 129 if data is not None: 130 self.mode = 'edit'
131 132 #self.__init_ui() 133 #---------------------------------------------------------------- 134 # def __init_ui(self): 135 # # adjust phrasewheels etc 136 #---------------------------------------------------------------- 137 # generic Edit Area mixin API 138 #----------------------------------------------------------------
139 - def _valid_for_save(self):
140 validity = True 141 142 if self._PRW_care_location.GetData() is None: 143 validity = False 144 self._PRW_care_location.display_as_valid(False) 145 self.status_message = _('No entry in field "Care Location".') 146 self._PRW_care_location.SetFocus() 147 else: 148 self._PRW_care_location.display_as_valid(True) 149 150 if self._PRW_issue.GetData() is not None: 151 self._PRW_issue.display_as_valid(True) 152 else: 153 if self._PRW_issue.GetValue().strip() != '': 154 self._PRW_issue.display_as_valid(True) 155 else: 156 validity = False 157 self._PRW_issue.display_as_valid(False) 158 self.status_message = _('No entry in field [Care Target].') 159 self._PRW_issue.SetFocus() 160 161 return validity
162 163 #----------------------------------------------------------------
164 - def _save_as_new(self):
165 data = gmExternalCare.create_external_care_item ( 166 pk_encounter = gmPerson.gmCurrentPatient().emr.current_encounter['pk_encounter'], 167 pk_health_issue = self._PRW_issue.GetData(), 168 issue = self._PRW_issue.GetValue().strip(), 169 pk_org_unit = self._PRW_care_location.GetData() 170 ) 171 data['provider'] = self._TCTRL_provider.GetValue().strip() 172 data['comment'] = self._TCTRL_comment.GetValue().strip() 173 data['inactive'] = self._CHBOX_inactive.IsChecked() 174 data.save() 175 self.data = data 176 return True
177 178 #----------------------------------------------------------------
179 - def _save_as_update(self):
180 self.data['pk_encounter'] = gmPerson.gmCurrentPatient().emr.current_encounter['pk_encounter'] 181 self.data['pk_health_issue'] = self._PRW_issue.GetData() 182 self.data['issue'] = self._PRW_issue.GetValue().strip() 183 self.data['pk_org_unit'] = self._PRW_care_location.GetData() 184 self.data['provider'] = self._TCTRL_provider.GetValue().strip() 185 self.data['comment'] = self._TCTRL_comment.GetValue().strip() 186 self.data['inactive'] = self._CHBOX_inactive.IsChecked() 187 self.data.save() 188 return True
189 190 #----------------------------------------------------------------
191 - def _refresh_as_new(self):
192 self._PRW_issue.SetText('', None) 193 self._PRW_care_location.SetText('', None) 194 self._TCTRL_provider.SetValue('') 195 self._TCTRL_comment.SetValue('') 196 self._CHBOX_inactive.Value = False 197 198 self._PRW_issue.SetFocus()
199 200 #----------------------------------------------------------------
202 self._refresh_as_new()
203 204 #----------------------------------------------------------------
205 - def _refresh_from_existing(self):
206 self._PRW_issue.SetText(value = self.data['issue'], data = self.data['pk_health_issue'], suppress_smarts = True) 207 self._PRW_care_location.SetText(value = '%s @ %s' % (self.data['unit'], self.data['organization']), data = self.data['pk_org_unit']) 208 self._TCTRL_provider.SetValue(gmTools.coalesce(self.data['provider'], '')) 209 self._TCTRL_comment.SetValue(gmTools.coalesce(self.data['comment'], '')) 210 self._CHBOX_inactive.Value = self.data['inactive'] 211 212 self._TCTRL_comment.SetFocus()
213 214 #------------------------------------------------------------
215 -class cExternalCareMgrPnl(gmListWidgets.cGenericListManagerPnl):
216 """A list for managing a patient's external care. 217 218 Does NOT act on/listen to the current patient. 219 """
220 - def __init__(self, *args, **kwargs):
221 222 try: 223 self.__identity = kwargs['identity'] 224 del kwargs['identity'] 225 except KeyError: 226 self.__identity = None 227 228 gmListWidgets.cGenericListManagerPnl.__init__(self, *args, **kwargs) 229 230 self.refresh_callback = self.refresh 231 self.new_callback = self._add_care 232 self.edit_callback = self._edit_care 233 self.delete_callback = self._del_care 234 235 self.__init_ui() 236 self.refresh()
237 #-------------------------------------------------------- 238 # external API 239 #--------------------------------------------------------
240 - def refresh(self, *args, **kwargs):
241 if self.__identity is None: 242 self._LCTRL_items.set_string_items() 243 return 244 245 emr = self.__identity.emr 246 care = emr.get_external_care_items(order_by = 'inactive, issue, provider, unit, organization') 247 items = [ [ 248 '%s @ %s' % ( 249 c['unit'], 250 c['organization'] 251 ), 252 gmTools.coalesce(c['provider'], ''), 253 c['issue'], 254 gmTools.bool2subst(c['inactive'], _('inactive'), '', '<ERROR: .inactive IS NULL>'), 255 gmTools.coalesce(c['comment'], '') 256 ] for c in care ] 257 self._LCTRL_items.set_string_items(items) 258 self._LCTRL_items.set_column_widths() 259 self._LCTRL_items.set_data(data = care)
260 261 #-------------------------------------------------------- 262 # internal helpers 263 #--------------------------------------------------------
264 - def __init_ui(self):
265 self._LCTRL_items.set_columns(columns = [ 266 _('Care location'), 267 _('Provider'), 268 _('Reason for care'), 269 _('Status'), 270 _('Comment') 271 ])
272 273 #--------------------------------------------------------
274 - def _add_care(self):
275 return edit_external_care_item(parent = self, external_care_item = None)
276 277 #--------------------------------------------------------
278 - def _edit_care(self, external_care_item):
279 return edit_external_care_item(parent = self, external_care_item = external_care_item)
280 281 #--------------------------------------------------------
282 - def _del_care(self, external_care_item):
283 go_ahead = gmGuiHelpers.gm_show_question ( 284 _( 'Do you really want to delete this\n' 285 'external care entry from the patient ?'), 286 _('Deleting external care entry') 287 ) 288 if not go_ahead: 289 return False 290 if gmExternalCare.delete_external_care_item(pk_external_care = external_care_item['pk_external_care']): 291 return True 292 gmDispatcher.send ( 293 signal = 'statustext', 294 msg = _('Cannot delete external care item.'), 295 beep = True 296 ) 297 return False
298 299 #-------------------------------------------------------- 300 # properties 301 #--------------------------------------------------------
302 - def _get_identity(self):
303 return self.__identity
304
305 - def _set_identity(self, identity):
306 self.__identity = identity 307 self.refresh()
308 309 identity = property(_get_identity, _set_identity)
310 #------------------------------------------------------------ 311