Home | Trees | Indices | Help |
|
---|
|
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 #============================================================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 #----------------------------------------------------------------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 False110 111 #==================================================================== 112 from Gnumed.wxGladeWidgets import wxgExternalCareEAPnl 113114 -class cExternalCareEAPnl(wxgExternalCareEAPnl.wxgExternalCareEAPnl, gmEditArea.cGenericEditAreaMixin):115213 214 #------------------------------------------------------------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 #----------------------------------------------------------------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 validity162 163 #----------------------------------------------------------------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 True177 178 #----------------------------------------------------------------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 True189 190 #----------------------------------------------------------------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 #---------------------------------------------------------------- 203 204 #----------------------------------------------------------------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()216 """A list for managing a patient's external care. 217 218 Does NOT act on/listen to the current patient. 219 """310 #------------------------------------------------------------ 311221 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 #--------------------------------------------------------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 #--------------------------------------------------------265 self._LCTRL_items.set_columns(columns = [ 266 _('Care location'), 267 _('Provider'), 268 _('Reason for care'), 269 _('Status'), 270 _('Comment') 271 ])272 273 #-------------------------------------------------------- 276 277 #-------------------------------------------------------- 280 281 #--------------------------------------------------------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 False298 299 #-------------------------------------------------------- 300 # properties 301 #-------------------------------------------------------- 304 308 309 identity = property(_get_identity, _set_identity)
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Wed Dec 19 02:55:28 2018 | http://epydoc.sourceforge.net |