| Home | Trees | Indices | Help |
|
|---|
|
|
1 # GNUmed
2
3 #===========================================================
4 __author__ = "R.Terry <rterry@gnumed.net>, I.Haywood <i.haywood@ugrad.unimelb.edu.au>, K.Hilbert <Karsten.Hilbert@gmx.net>"
5 __license__ = "GPL v2 or later"
6
7
8 import sys, os.path, datetime as pyDT, logging
9
10
11 import wx
12
13
14 from Gnumed.pycommon import gmGuiBroker, gmDispatcher, gmTools, gmCfg2, gmDateTime, gmI18N
15 from Gnumed.business import gmPerson, gmEMRStructItems, gmAllergy
16 from Gnumed.wxpython import gmGuiHelpers
17 from Gnumed.wxpython import gmDemographicsWidgets
18 from Gnumed.wxpython import gmAllergyWidgets
19 from Gnumed.wxpython import gmPatSearchWidgets
20 from Gnumed.wxpython import gmEMRStructWidgets
21 from Gnumed.wxpython import gmPatPicWidgets
22
23
24 _log = logging.getLogger('gm.ui')
25
26 #===========================================================
27 from Gnumed.wxGladeWidgets import wxgTopPnl
28
30
32
33 wxgTopPnl.wxgTopPnl.__init__(self, *args, **kwargs)
34
35 self.__gb = gmGuiBroker.GuiBroker()
36
37 self.curr_pat = gmPerson.gmCurrentPatient()
38
39 self.__init_ui()
40 self.__register_interests()
41 #-------------------------------------------------------
43 cfg = gmCfg2.gmCfgData()
44 if cfg.get(option = 'slave'):
45 self._TCTRL_patient_selector.SetEditable(0)
46 self._TCTRL_patient_selector.SetToolTip(None)
47 #-------------------------------------------------------
49 # events
50 wx.EVT_LEFT_DCLICK(self._TCTRL_allergies, self._on_allergies_dclicked)
51
52 # client internal signals
53 gmDispatcher.connect(signal = u'post_patient_selection', receiver = self._on_post_patient_selection)
54 gmDispatcher.connect(signal = u'allg_mod_db', receiver = self._on_allergies_change)
55 gmDispatcher.connect(signal = u'allg_state_mod_db', receiver = self._on_allergies_change)
56 gmDispatcher.connect(signal = u'name_mod_db', receiver = self._on_name_identity_change)
57 gmDispatcher.connect(signal = u'identity_mod_db', receiver = self._on_name_identity_change)
58 gmDispatcher.connect(signal = u'identity_tag_mod_db', receiver = self._on_tag_change)
59 #----------------------------------------------
60 # event handling
61 #----------------------------------------------
63 if not self.curr_pat.connected:
64 gmDispatcher.send('statustext', msg = _('Cannot activate Allergy Manager. No active patient.'))
65 return
66 dlg = gmAllergyWidgets.cAllergyManagerDlg(parent=self, id=-1)
67 dlg.ShowModal()
68 return
69 #----------------------------------------------
72 #----------------------------------------------
75 #----------------------------------------------
77 # needed because GUI stuff can't be called from a thread (and that's
78 # where we are coming from via backend listener -> dispatcher)
79 wx.CallAfter(self.__on_post_patient_selection, **kwargs)
80 #-------------------------------------------------------
83 #-------------------------------------------------------
84 # internal API
85 #-------------------------------------------------------
90 #-------------------------------------------------------
93 #-------------------------------------------------------
95
96 if self.curr_pat['deceased'] is None:
97
98 if self.curr_pat.get_formatted_dob(format = '%m-%d') == pyDT.datetime.now(tz = gmDateTime.gmCurrentLocalTimezone).strftime('%m-%d'):
99 template = _('%s %s (%s today !)')
100 else:
101 template = u'%s %s (%s)'
102
103 # FIXME: if the age is below, say, 2 hours we should fire
104 # a timer here that updates the age in increments of 1 minute ... :-)
105 age = template % (
106 gmPerson.map_gender2symbol[self.curr_pat['gender']],
107 self.curr_pat.get_formatted_dob(format = '%d %b %Y', encoding = gmI18N.get_encoding()),
108 self.curr_pat['medical_age']
109 )
110
111 # Easter Egg ;-)
112 if self.curr_pat['lastnames'] == u'Leibner':
113 if self.curr_pat['firstnames'] == u'Steffi':
114 if self.curr_pat['preferred'] == u'Wildfang':
115 age = u'%s %s' % (gmTools.u_black_heart, age)
116
117 else:
118
119 template = u'%s %s - %s (%s)'
120 age = template % (
121 gmPerson.map_gender2symbol[self.curr_pat['gender']],
122 self.curr_pat.get_formatted_dob(format = '%d.%b %Y', encoding = gmI18N.get_encoding()),
123 self.curr_pat['deceased'].strftime('%d.%b %Y').decode(gmI18N.get_encoding()),
124 self.curr_pat['medical_age']
125 )
126
127 self._LBL_age.SetLabel(age)
128 #-------------------------------------------------------
130
131 emr = self.curr_pat.get_emr()
132 state = emr.allergy_state
133
134 # state in tooltip
135 if state['last_confirmed'] is None:
136 confirmed = _('never')
137 else:
138 confirmed = state['last_confirmed'].strftime('%Y %B %d').decode(gmI18N.get_encoding())
139 tt = (state.state_string + (90 * u' '))[:90] + u'\n'
140 tt += _('last confirmed %s\n') % confirmed
141 tt += gmTools.coalesce(state['comment'], u'', _('Comment (%s): %%s') % state['modified_by'])
142 tt += u'\n'
143
144 # allergies
145 tmp = []
146 for allergy in emr.get_allergies():
147 # in field: "true" allergies only, not intolerances
148 if allergy['type'] == 'allergy':
149 tmp.append(allergy['descriptor'][:10].strip() + gmTools.u_ellipsis)
150 # in tooltip
151 if allergy['definite']:
152 certainty = _('definite')
153 else:
154 certainty = _('suspected')
155 reaction = gmTools.coalesce(allergy['reaction'], _('reaction not recorded'))
156 if len(reaction) > 50:
157 reaction = reaction[:50] + gmTools.u_ellipsis
158 tt += u'%s (%s, %s): %s\n' % (
159 allergy['descriptor'],
160 allergy['l10n_type'],
161 certainty,
162 reaction
163 )
164
165 if len(tmp) == 0:
166 tmp = state.state_symbol
167 else:
168 tmp = ','.join(tmp)
169
170 if state['last_confirmed'] is not None:
171 tmp += state['last_confirmed'].strftime(' (%x)')
172
173 self._TCTRL_allergies.SetValue(tmp)
174 self._TCTRL_allergies.SetToolTipString(tt)
175
176 #===========================================================
177 if __name__ == "__main__":
178 wx.InitAllImageHandlers()
179 app = wxPyWidgetTester(size = (400, 200))
180 app.SetWidget(cMainTopPanel, -1)
181 app.SetWidget(cTopPanel, -1)
182 app.MainLoop()
183 #===========================================================
184
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Thu Feb 9 04:01:06 2012 | http://epydoc.sourceforge.net |