def _on_list_item_activated(self, evt): data = self.get_selected_item_data(only_one = True) pk_pat_col = self.__get_patient_pk_data_key(data = data) if pk_pat_col is None: gmDispatcher.send(signal = 'statustext', msg = _('List not known to be patient-related.')) return pat_data = data[pk_pat_col] try: pat_pk = int(pat_data) pat = gmPerson.cPerson(aPK_obj = pat_pk) except (ValueError, TypeError): searcher = gmPersonSearch.cPatientSearcher_SQL() idents = searcher.get_identities(pat_data) if len(idents) == 0: gmDispatcher.send(signal = 'statustext', msg = _('No matching patient found.')) return if len(idents) == 1: pat = idents[0] else: from Gnumed.wxpython import gmPatSearchWidgets dlg = gmPatSearchWidgets.cSelectPersonFromListDlg(parent=wx.GetTopLevelParent(self), id=-1) dlg.set_persons(persons=idents) result = dlg.ShowModal() if result == wx.ID_CANCEL: dlg.Destroy() return pat = dlg.get_selected_person() dlg.Destroy() from Gnumed.wxpython import gmPatSearchWidgets gmPatSearchWidgets.set_active_patient(patient = pat)
def search_patient(self, search_term): self.__person_searcher = gmPersonSearch.cPatientSearcher_SQL() # get list of matching ids idents = self.__person_searcher.get_identities(search_term) if idents is None: idents = [] _log.info("%s matching person(s) found", len(idents)) # only one matching identity if len(idents) == 1: self.person = idents[0] return jsonclasshintify(self.person) # ambiguous - return available choices, to be able to choose from them. self.person = None return jsonclasshintify(idents)
def __init__(self, *args, **kwargs): try: kwargs['style'] = kwargs['style'] | wx.TE_PROCESS_ENTER except KeyError: kwargs['style'] = wx.TE_PROCESS_ENTER # need to explicitly process ENTER events to avoid # them being handed over to the next control wx.TextCtrl.__init__(self, *args, **kwargs) self.person = None self._tt_search_hints = _( 'To search for a person, type any of: \n' '\n' ' - fragment(s) of last and/or first name(s)\n' " - GNUmed ID of person (can start with '#')\n" ' - any external ID of person\n' " - date of birth (can start with '$' or '*')\n" '\n' 'and hit <ENTER>.\n' '\n' 'Shortcuts:\n' ' <F2>\n' ' - scan external sources for persons\n' ' <CURSOR-UP>\n' ' - recall most recently used search term\n' ' <CURSOR-DOWN>\n' ' - list 10 most recently found persons\n' ) self.SetToolTip(self._tt_search_hints) # FIXME: set query generator self.__person_searcher = gmPersonSearch.cPatientSearcher_SQL() self._prev_search_term = None self.__prev_idents = [] self._lclick_count = 0 self.__register_events()
def _on_list_item_activated(self, evt): data = self.get_selected_item_data(only_one=True) pk_pat_col = self.__get_patient_pk_data_key(data=data) if pk_pat_col is None: gmDispatcher.send(signal='statustext', msg=_('List not known to be patient-related.')) return pat_data = data[pk_pat_col] try: pat_pk = int(pat_data) pat = gmPerson.cPerson(aPK_obj=pat_pk) except (ValueError, TypeError): searcher = gmPersonSearch.cPatientSearcher_SQL() idents = searcher.get_identities(pat_data) if len(idents) == 0: gmDispatcher.send(signal='statustext', msg=_('No matching patient found.')) return if len(idents) == 1: pat = idents[0] else: from Gnumed.wxpython import gmPatSearchWidgets dlg = gmPatSearchWidgets.cSelectPersonFromListDlg( parent=wx.GetTopLevelParent(self), id=-1) dlg.set_persons(persons=idents) result = dlg.ShowModal() if result == wx.ID_CANCEL: dlg.Destroy() return pat = dlg.get_selected_person() dlg.Destroy() except ConstructorError: gmDispatcher.send(signal='statustext', msg=_('No matching patient found.')) return from Gnumed.wxpython import gmPatSearchWidgets gmPatSearchWidgets.set_active_patient(patient=pat)
This will generate lab requests for all sample IDs found in <ldt-datei>. All requests will belong to Laborata Testwoman. """ sys.exit() print "accessing patient Laborata Testwoman" # set encoding gmPG.set_default_client_encoding("latin1") # setup login defs auth_data = gmLoginInfo.LoginInfo(user="******", passwd="any-doc", host="hherb.com", port=5432, database="gnumed") backend = gmPG.ConnectionPool(login=auth_data) pat_data = {"lastnames": "Testwoman", "firstnames": "Laborata", "gender": "f"} searcher = gmPersonSearch.cPatientSearcher_SQL() pat_ids = searcher.get_patient_ids(search_dict=pat_data) if len(pat_ids) == 0: print "cannot find Laborata Testwoman" sys.exit() if len(pat_ids) > 1: print "more than one patient for Laborata Testwoman" sys.exit() patid = pat_ids[0] print "Laborata Testwoman has ID [%s]" % patid pat = gmPerson.gmCurrentPatient(aPKey=patid) emr = pat.get_clinical_record() enc = emr.get_active_encounter() enc_id = enc["pk_encounter"]
(pat_ldt['dob'] != pat_db[4].strftime('%Y-%m-%d'))): _log.Log(gmLog.lErr, 'patient mismatch LDT-Datei <-> Datenbank') _log.Log(gmLog.lData, 'Datei: %s' % pat_ldt) _log.Log(gmLog.lData, 'DB: %s' % pat_db) return None # or create one from name/dob # FIXME: we may have to use field 3100, too if request is None: # check essential fields if pat_ldt is None: _log.Log(gmLog.lErr, 'Satz vom Typ [8000:%s] enthaelt nicht alle Felder [3101, 3102, 3103]' % request_data['8000'][0]) _log.Log(gmLog.lErr, 'Kann lab_request nicht automatisch erzeugen.') return None # find patient searcher = gmPersonSearch.cPatientSearcher_SQL() pat_ids = searcher.get_patient_ids(search_dict=pat_ldt) print "must use dto, not search_dict" if len(pat_ids) == 0: _log.Log(gmLog.lErr, 'Kann in der Datenbank keinen Patienten fuer %s finden.' % str(pat_ldt)) return None if len(pat_ids) > 1: _log.Log(gmLog.lErr, 'Mehrere Patienten fuer %s gefunden: %s' % (str(pat_ldt), str(pat_ids))) return None # create lab request try: pat = gmPerson.gmPerson(aPKey=pat_ids[0]) except gmExceptions.ConstructorError: _log.LogException('patient error', sys.exc_info()) return None emr = pat.emr