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

Source Code for Module Gnumed.wxpython.gmHabitWidgets

  1  """GNUmed habits widgets.""" 
  2  #================================================================ 
  3  __author__ = "Karsten Hilbert <Karsten.Hilbert@gmx.net>" 
  4  __license__ = "GPL v2 or later" 
  5   
  6  import sys 
  7  import logging 
  8   
  9   
 10  import wx 
 11   
 12   
 13  if __name__ == '__main__': 
 14          sys.path.insert(0, '../../') 
 15  from Gnumed.pycommon import gmTools 
 16  from Gnumed.pycommon import gmDispatcher 
 17  from Gnumed.pycommon import gmDateTime 
 18   
 19  from Gnumed.business import gmATC 
 20  from Gnumed.business import gmMedication 
 21   
 22  from Gnumed.wxpython import gmEditArea 
 23  from Gnumed.wxpython import gmListWidgets 
 24   
 25  _log = logging.getLogger('gm.ui') 
 26   
 27  #================================================================ 
28 -def edit_substance_abuse(parent=None, intake=None, patient=None):
29 30 if parent is None: 31 parent = wx.GetApp().GetTopWindow() 32 33 ea = cSubstanceAbuseEAPnl(parent, -1, intake = intake, patient = patient) 34 dlg = gmEditArea.cGenericEditAreaDlg2(parent, -1, edit_area = ea, single_entry = (intake is not None)) 35 dlg.SetTitle(gmTools.coalesce(intake, _('Adding substance abuse'), _('Editing substance abuse'))) 36 if dlg.ShowModal() == wx.ID_OK: 37 dlg.DestroyLater() 38 return True 39 dlg.DestroyLater() 40 return False
41 42 #----------------------------------------------------------------
43 -def manage_substance_abuse(parent=None, patient=None):
44 45 if parent is None: 46 parent = wx.GetApp().GetTopWindow() 47 48 # #------------------------------------------------------------ 49 # def add_from_db(substance): 50 # drug_db = get_drug_database(parent = parent, patient = gmPerson.gmCurrentPatient()) 51 # if drug_db is None: 52 # return False 53 # drug_db.import_drugs() 54 # return True 55 # #------------------------------------------------------------ 56 def edit(intake=None): 57 return edit_substance_abuse(parent = parent, intake = intake, patient = patient)
58 59 #------------------------------------------------------------ 60 def delete(intake): 61 return intake.delete() 62 63 #------------------------------------------------------------ 64 def get_tooltip(intake=None): 65 return intake.format(single_line = False) 66 67 #------------------------------------------------------------ 68 def refresh(lctrl): 69 intakes = patient.emr.abused_substances 70 items = [] 71 for i in intakes: 72 items.append ([ 73 i['substance'], 74 i.harmful_use_type_string, 75 gmDateTime.pydt_strftime(i['last_checked_when'], '%b %Y', none_str = '') 76 ]) 77 lctrl.set_string_items(items) 78 lctrl.set_data(intakes) 79 80 #------------------------------------------------------------ 81 if len(patient.emr.abused_substances) == 0: 82 edit() 83 84 msg = _('Substances abused by the patient:') 85 86 return gmListWidgets.get_choices_from_list ( 87 parent = parent, 88 msg = msg, 89 caption = _('Showing abused substances.'), 90 columns = [ _('Intake'), _('Status'), _('Last confirmed') ], 91 single_selection = False, 92 new_callback = edit, 93 edit_callback = edit, 94 delete_callback = delete, 95 refresh_callback = refresh, 96 list_tooltip_callback = get_tooltip 97 ) 98 99 #---------------------------------------------------------------- 100 from Gnumed.wxGladeWidgets import wxgSubstanceAbuseEAPnl 101
102 -class cSubstanceAbuseEAPnl(wxgSubstanceAbuseEAPnl.wxgSubstanceAbuseEAPnl, gmEditArea.cGenericEditAreaMixin):
103
104 - def __init__(self, *args, **kwargs):
105 try: 106 data = kwargs['intake'] 107 del kwargs['intake'] 108 except KeyError: 109 data = None 110 111 self.__patient = kwargs['patient'] 112 del kwargs['patient'] 113 114 if data is not None: 115 if data['pk_patient'] != self.__patient.ID: 116 _log.error('intake: %s', data) 117 _log.error('patient: %s', self.__patient) 118 raise ArgumentError('<intake> does not belong to <patient>') 119 120 wxgSubstanceAbuseEAPnl.wxgSubstanceAbuseEAPnl.__init__(self, *args, **kwargs) 121 gmEditArea.cGenericEditAreaMixin.__init__(self) 122 123 self.mode = 'new' 124 self.data = data 125 if data is not None: 126 self.mode = 'edit'
127 128 #self.__init_ui() 129 130 # #---------------------------------------------------------------- 131 # def __init_ui(self): 132 # if self.mode == 'new': 133 #---------------------------------------------------------------- 134 # generic Edit Area mixin API 135 #----------------------------------------------------------------
136 - def _valid_for_save(self):
137 validity = True 138 139 if not self._DPRW_quit_when.is_valid_timestamp(empty_is_valid = True): 140 validity = False 141 self._DPRW_quit_when.SetFocus() 142 143 if self._RBTN_other_substance.GetValue() is True: 144 if self._PRW_substance.GetValue().strip() == '': 145 validity = False 146 self._PRW_substance.display_as_valid(valid = False) 147 self._PRW_substance.SetFocus() 148 else: 149 self._PRW_substance.display_as_valid(valid = True) 150 151 return validity
152 153 #----------------------------------------------------------------
154 - def _save_as_new(self):
155 156 if self._RBTN_tobacco.GetValue() is True: 157 pk_drug_product = gmMedication.get_tobacco()['pk_drug_product'] 158 159 elif self._RBTN_c2.GetValue() is True: 160 pk_drug_product = gmMedication.get_alcohol()['pk_drug_product'] 161 162 elif self._RBTN_other_substance.GetValue() is True: 163 #xxxxxxxxx 164 #PRW_substance -> _dose 165 pk_drug_product = gmMedication.get_other_drug ( 166 name = self._PRW_substance.GetValue().strip(), 167 pk_dose = self._PRW_substance.GetData() 168 )['pk_drug_product'] 169 170 pk_encounter = self.__patient.emr.active_encounter['pk_encounter'] 171 intake = gmMedication.create_substance_intake ( 172 pk_drug_product = pk_drug_product, 173 pk_encounter = pk_encounter, 174 pk_episode = gmMedication.create_default_medication_history_episode(encounter = pk_encounter)['pk_episode'] 175 ) 176 177 if self._RBTN_nonharmful_use.GetValue() is True: 178 intake['harmful_use_type'] = 0 179 elif self._RBTN_harmful_use.GetValue() is True: 180 intake['harmful_use_type'] = 1 181 elif self._RBTN_presently_addicted.GetValue() is True: 182 intake['harmful_use_type'] = 2 183 elif self._RBTN_previously_addicted.GetValue() is True: 184 intake['harmful_use_type'] = 3 185 intake['notes'] = self._TCTRL_comment.GetValue().strip() 186 if self._DPRW_quit_when.is_valid_timestamp(empty_is_valid = False): 187 intake['discontinued'] = self._DPRW_quit_when.date 188 intake.save() 189 190 self.data = intake 191 192 return True
193 194 #----------------------------------------------------------------
195 - def _save_as_update(self):
196 197 if self._RBTN_nonharmful_use.GetValue() is True: 198 self.data['harmful_use_type'] = 0 199 elif self._RBTN_harmful_use.GetValue() is True: 200 self.data['harmful_use_type'] = 1 201 elif self._RBTN_presently_addicted.GetValue() is True: 202 self.data['harmful_use_type'] = 2 203 elif self._RBTN_previously_addicted.GetValue() is True: 204 self.data['harmful_use_type'] = 3 205 self.data['notes'] = self._TCTRL_comment.GetValue().strip() 206 if self._DPRW_quit_when.is_valid_timestamp(empty_is_valid = False): 207 self.data['discontinued'] = self._DPRW_quit_when.date 208 if self._CHBOX_confirm.GetValue() is True: 209 self.data['pk_encounter'] = self.__patient.emr.active_encounter['pk_encounter'] 210 211 self.data.save() 212 213 return True
214 215 #----------------------------------------------------------------
216 - def _refresh_as_new(self):
217 218 self._RBTN_tobacco.SetValue(False) 219 self._RBTN_c2.SetValue(False) 220 self._RBTN_other_substance.SetValue(True) 221 self._PRW_substance.SetText('', None) 222 self._PRW_substance.Enable() 223 self._RBTN_nonharmful_use.SetValue(True) 224 self._RBTN_harmful_use.SetValue(False) 225 self._RBTN_presently_addicted.SetValue(False) 226 self._RBTN_previously_addicted.SetValue(False) 227 self._TCTRL_comment.SetValue('') 228 self._DPRW_quit_when.SetText('', None) 229 self._LBL_confirm_date.SetLabel('<%s>' % _('today')) 230 self._CHBOX_confirm.SetValue(True) 231 self._CHBOX_confirm.Disable() 232 233 if gmMedication.substance_intake_exists_by_atc(pk_identity = self.__patient.ID, atc = gmATC.ATC_NICOTINE): 234 self._RBTN_tobacco.Disable() 235 else: 236 self._RBTN_tobacco.Enable() 237 238 if gmMedication.substance_intake_exists_by_atc(pk_identity = self.__patient.ID, atc = gmATC.ATC_ETHANOL): 239 self._RBTN_c2.Disable() 240 else: 241 self._RBTN_c2.Enable() 242 243 self._PRW_substance.SetFocus()
244 245 #----------------------------------------------------------------
247 self._refresh_as_new()
248 249 #----------------------------------------------------------------
250 - def _refresh_from_existing(self):
251 252 self._RBTN_tobacco.Disable() 253 self._RBTN_c2.Disable() 254 self._RBTN_other_substance.Disable() 255 self._PRW_substance.Disable() 256 257 if self.data['atc_substance'] == gmATC.ATC_NICOTINE: 258 self._RBTN_tobacco.SetValue(True) 259 self._RBTN_c2.SetValue(False) 260 self._RBTN_other_substance.SetValue(False) 261 self._PRW_substance.SetText('', None) 262 elif self.data['atc_substance'] == gmATC.ATC_ETHANOL: 263 self._RBTN_tobacco.SetValue(False) 264 self._RBTN_c2.SetValue(True) 265 self._RBTN_other_substance.SetValue(False) 266 self._PRW_substance.SetText('', None) 267 else: 268 self._RBTN_tobacco.SetValue(False) 269 self._RBTN_c2.SetValue(False) 270 self._RBTN_other_substance.SetValue(True) 271 self._PRW_substance.SetText(self.data['substance'], self.data['pk_substance']) 272 273 if self.data['harmful_use_type'] == 0: 274 self._RBTN_nonharmful_use.SetValue(True) 275 self._RBTN_harmful_use.SetValue(False) 276 self._RBTN_presently_addicted.SetValue(False) 277 self._RBTN_previously_addicted.SetValue(False) 278 elif self.data['harmful_use_type'] == 1: 279 self._RBTN_nonharmful_use.SetValue(False) 280 self._RBTN_harmful_use.SetValue(True) 281 self._RBTN_presently_addicted.SetValue(False) 282 self._RBTN_previously_addicted.SetValue(False) 283 elif self.data['harmful_use_type'] == 2: 284 self._RBTN_nonharmful_use.SetValue(False) 285 self._RBTN_harmful_use.SetValue(False) 286 self._RBTN_presently_addicted.SetValue(True) 287 self._RBTN_previously_addicted.SetValue(False) 288 elif self.data['harmful_use_type'] == 3: 289 self._RBTN_nonharmful_use.SetValue(False) 290 self._RBTN_harmful_use.SetValue(False) 291 self._RBTN_presently_addicted.SetValue(False) 292 self._RBTN_previously_addicted.SetValue(True) 293 294 self._TCTRL_comment.SetValue(gmTools.coalesce(self.data['notes'], '')) 295 self._DPRW_quit_when.SetText(data = self.data['discontinued']) 296 self._LBL_confirm_date.SetLabel(gmDateTime.pydt_strftime(self.data['last_checked_when'], '%Y %b %d', none_str = '')) 297 self._CHBOX_confirm.Enable() 298 self._CHBOX_confirm.SetValue(True) 299 300 self._TCTRL_comment.SetFocus()
301 302 #----------------------------------------------------------------
303 - def _on_substance_rbutton_selected(self, event):
304 event.Skip() 305 if self._RBTN_other_substance.GetValue() is True: 306 self._PRW_substance.Enable(True) 307 return 308 self._PRW_substance.Disable()
309 310 #================================================================ 311 # main 312 #================================================================ 313 if __name__ == '__main__': 314 315 if len(sys.argv) < 2: 316 sys.exit() 317 318 if sys.argv[1] != 'test': 319 sys.exit() 320 321 gmI18N.activate_locale() 322 gmI18N.install_domain(domain = 'gnumed') 323 324 # def test_message_inbox(): 325 # app = wx.PyWidgetTester(size = (800, 600)) 326 # app.SetWidget(cProviderInboxPnl, -1) 327 # app.MainLoop() 328 329 # def test_msg_ea(): 330 # app = wx.PyWidgetTester(size = (800, 600)) 331 # app.SetWidget(cInboxMessageEAPnl, -1) 332 # app.MainLoop() 333 334 335 #test_message_inbox() 336 #test_msg_ea() 337