1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 __version__ = "$Revision: 1.40 $"
21 __author__ = "R.Terry, SJ Tan"
22
23
24 import wx
25
26 from mx import DateTime
27
28 from Gnumed.pycommon import gmGuiBroker, gmDispatcher
29
30 import gmPlugin
31 import gmSQLListControl
32 from string import *
33
34
35 ID_PATIENT = wxNewId()
36 ID_PATIENTSLIST = wxNewId()
37 ID_ALL_MENU = wxNewId()
38 ID_ADDRESSLIST = wxNewId()
39 ID_NAMESLIST = wxNewId()
40 ID_CURRENTADDRESS = wxNewId()
41 gmSECTION_PATIENT = 5
42 ID_COMBOTITLE = wxNewId()
43 ID_COMBOSEX = wxNewId()
44 ID_COMBOMARITALSTATUS = wxNewId()
45 ID_COMBONOKRELATIONSHIP = wxNewId()
46 ID_TXTSURNAME = wxNewId()
47 ID_TXTFIRSTNAME = wxNewId()
48 ID_TXTSALUTATION = wxNewId()
49 ID_TXTSTREET = wxNewId()
50 ID_TXTSUBURB = wxNewId()
51 ID_TXTSTATE = wxNewId()
52 ID_TXTPOSTCODE = wxNewId()
53 ID_TXTBIRTHDATE = wxNewId()
54 ID_TXTCOUNTRYOFBIRTH = wxNewId()
55 ID_TXTOCCUPATION = wxNewId()
56 ID_TXTNOKADDRESS = wxNewId()
57 ID_TXTHOMEPHONE = wxNewId()
58 ID_TXTWORKPHONE = wxNewId()
59 ID_TXTFAX = wxNewId()
60 ID_TXTEMAIL = wxNewId()
61 ID_TXTINTERNET = wxNewId()
62 ID_TXTMOBILE = wxNewId()
63 ID_TXTMEMO = wxNewId()
64 ID_LISTADDRESSES = wxNewId()
65 ID_BUTTONBROWSENOK = wxNewId()
66 ID_BUTTONPHOTOAQUIRE = wxNewId()
67 ID_BUTTONPHOTOEXPORT = wxNewId()
68 ID_BUTTONPHOTOIMPORT = wxNewId()
69 ID_CHKBOXRESIDENCE = wxNewId()
70 ID_CHKBOXPOSTAL = wxNewId()
71 ID_CHKBOXPREFERREDALIAS = wxNewId()
72 ID_BUTTONFINDPATIENT = wxNewId()
73 ID_TXTPATIENTFIND = wxNewId()
74 ID_TXTPATIENTAGE = wxNewId()
75 ID_TXTPATIENTALLERGIES = wxNewId()
76
77
78
79
80 aliasdata = {
81 1 : ("Peter Patient"),
82 2 : ("Bruce Dag"),
83 }
84 namelistdata = [
85 'Smith Adan 129 Box Hill Road BOX HILL etc....',
86 'Smith Jean 52 WhereEver Street CANBERRA etc.....',
87 'Smith Michael 99 Longbeach Rd MANLYVALE etc........'
88 ]
89
90 addressdata = ['129 Afred Street WARNERS BAY 2280', '99 Wolfe Street NEWCASTLE 2301']
91
92
93
94
97 wxStaticText.__init__(self,parent, id,prompt,wxDefaultPosition,wxDefaultSize,wxALIGN_LEFT)
98 self.SetFont(wxFont(12,wxSWISS,wxNORMAL,wxBOLD,False,''))
99 self.SetForegroundColour(wxColour(0,0,131))
100
101
102
103 -class TextBox_RedBold(wxTextCtrl):
104 - def __init__ (self, parent, id):
105 wxTextCtrl.__init__(self,parent,id,"",wxDefaultPosition, wxDefaultSize,wxSIMPLE_BORDER)
106 self.SetForegroundColour(wxColor(255,0,0))
107 self.SetFont(wxFont(12,wxSWISS,wxNORMAL, wxBOLD,False,''))
108 -class TextBox_BlackNormal(wxTextCtrl):
109 - def __init__ (self, parent, id):
110 wxTextCtrl.__init__(self,parent,id,"",wxDefaultPosition, wxDefaultSize,wxSIMPLE_BORDER)
111 self.SetForegroundColour(wxColor(0,0,0))
112 self.SetFont(wxFont(12,wxSWISS,wxNORMAL, wxBOLD,False,''))
113
115 - def __init__(self, parent, plugin, id=wxNewId ()):
116 wxPanel.__init__(self, parent, id ,wxDefaultPosition,wxDefaultSize,wxRAISED_BORDER|wxTAB_TRAVERSAL)
117 gmDataPanelMixin.DataPanelMixin.__init__(self)
118 self.gb = gmGuiBroker.GuiBroker ()
119 self.mwm = self.gb['clinical.manager']
120 self.plugin = plugin
121
122 self.addresslist = wxListBox(self,ID_NAMESLIST,wxDefaultPosition,wxDefaultSize,addressdata,wxLB_SINGLE)
123 self.addresslist.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
124 self.addresslist.SetForegroundColour(wxColor(180,182,180))
125
126 self.patientslist = gmSQLListControl.SQLListControl (self, ID_PATIENTSLIST, hideid=True, style= wxLC_REPORT|wxLC_NO_HEADER|wxSUNKEN_BORDER)
127 self.patientslist.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
128 EVT_LIST_ITEM_SELECTED (self.patientslist, ID_PATIENTSLIST, self.OnPatient)
129 self.lbl_surname = BlueLabel(self,-1,"Surname")
130 self.lbl_firstname = BlueLabel(self,-1,"Firstname")
131 self.lbl_preferredname = BlueLabel(self,-1,"Salutation")
132 self.lbl_title = BlueLabel(self,-1,"Title")
133 self.lbl_sex = BlueLabel(self,-1,"Sex ")
134 self.lbl_street = BlueLabel(self,-1,"Street")
135 self.lbl_suburb = BlueLabel(self,-1,"Suburb")
136 self.lbl_zip = BlueLabel(self,-1,"Postcode")
137 self.lbl_address_s = BlueLabel(self,-1,"Address(s)")
138 self.lbl_birthdate = BlueLabel(self,-1,"Birthdate")
139 self.lbl_maritalstatus = BlueLabel(self,-1," Marital Status")
140 self.lbl_occupation = BlueLabel(self,-1,"Occupation")
141 self.lbl_birthplace = BlueLabel(self,-1,"Born In")
142 self.lbl_nextofkin = BlueLabel(self,-1,"")
143 self.lbl_addressNOK = BlueLabel(self,-1,"Next of Kin")
144 self.lbl_relationship = BlueLabel(self,-1," Relationship ")
145 self.lbl_homephone = BlueLabel(self,-1,"Home Phone")
146 self.lbl_workphone = BlueLabel(self,-1,"Work Phone")
147 self.lbl_fax = BlueLabel(self,-1,"Fax")
148 self.lbl_mobile = BlueLabel(self,-1,"Mobile")
149 self.lbl_email = BlueLabel(self,-1,"Email")
150 self.lbl_web = BlueLabel(self,-1,"Web")
151 self.lbl_mobile = BlueLabel(self,-1,"Mobile")
152 self.lbl_line6gap = BlueLabel(self,-1,"")
153 self.titlelist = ['Mr', 'Mrs', 'Miss', 'Mst', 'Ms', 'Dr', 'Prof']
154 self.combo_relationship = wxComboBox(self, 500, "", wxDefaultPosition,wxDefaultSize, ['Father','Mother'], wxCB_DROPDOWN)
155 self.txt_surname = TextBox_RedBold(self,-1)
156 self.combo_title = wxComboBox(self, 500, "", wxDefaultPosition,wxDefaultSize,self.titlelist, wxCB_DROPDOWN)
157 self.txt_firstname = TextBox_RedBold(self,-1)
158 self.combo_sex = wxComboBox(self, 500, "", wxDefaultPosition,wxDefaultSize, ['M','F'], wxCB_DROPDOWN)
159 self.cb_preferredname = wxCheckBox(self, -1, _("Preferred Name"), wxDefaultPosition,wxDefaultSize, wxNO_BORDER)
160 self.txt_preferred = TextBox_RedBold(self,-1)
161 self.txt_address = wxTextCtrl(self, 30, "",
162 wxDefaultPosition,wxDefaultSize, style=wxTE_MULTILINE|wxNO_3D|wxSIMPLE_BORDER)
163 self.txt_address.SetInsertionPoint(0)
164 self.txt_address.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
165 self.txt_suburb = TextBox_BlackNormal(self,-1)
166 self.txt_zip = TextBox_BlackNormal(self,-1)
167 self.txt_birthdate = TextBox_BlackNormal(self,-1)
168 self.combo_maritalstatus = wxComboBox(self, 500, "", wxDefaultPosition,wxDefaultSize,
169 ['single','married'], wxCB_DROPDOWN)
170 self.txt_occupation = TextBox_BlackNormal(self,-1)
171 self.txt_countryofbirth = TextBox_BlackNormal(self,-1)
172 self.btn_browseNOK = wxButton(self,-1,"Browse NOK")
173 self.txt_nameNOK = wxTextCtrl(self, 30,
174 "Peter Smith \n"
175 "22 Lakes Way \n"
176 "Valentine 2280",
177 wxDefaultPosition,wxDefaultSize, style=wxTE_MULTILINE|wxNO_3D|wxSIMPLE_BORDER)
178 self.txt_nameNOK.SetInsertionPoint(0)
179 self.txt_nameNOK.SetFont(wxFont(12,wxSWISS, wxNORMAL, wxNORMAL, False, ''))
180 self.txt_homephone = TextBox_BlackNormal(self,-1)
181 self.txt_workphone = TextBox_BlackNormal(self,-1)
182 self.txt_fax = TextBox_BlackNormal(self,-1)
183
184 self.txt_email = TextBox_BlackNormal(self,-1)
185 self.txt_web = TextBox_BlackNormal(self,-1)
186 self.txt_mobile = TextBox_BlackNormal(self,-1)
187
188
189
190 self.cb_addressresidence = wxCheckBox(self, -1, " Residence ", wxDefaultPosition,wxDefaultSize, wxNO_BORDER)
191 self.cb_addresspostal = wxCheckBox(self, -1, " Postal ", wxDefaultPosition,wxDefaultSize, wxNO_BORDER)
192
193
194
195 self.btn_photo_import= wxButton(self,-1,"Import")
196 self.btn_photo_export = wxButton(self,-1,"Export")
197 self.btn_photo_aquire = wxButton(self,-1,"Acquire")
198
199
200
201 self.sizer_line0_left = wxBoxSizer(wxHORIZONTAL)
202
203 self.sizer_line1_left = wxBoxSizer(wxHORIZONTAL)
204 self.sizer_line1_left.Add(self.lbl_surname,3, wxGROW|wxALIGN_CENTER_VERTICAL,5)
205 self.sizer_line1_left.Add(self.txt_surname,7,wxEXPAND)
206 self.sizer_line1_left.Add(0,0,1)
207 self.sizer_line1_left.Add(self.lbl_title,2,wxALIGN_CENTER_VERTICAL, 5)
208 self.sizer_line1_left.Add(self.combo_title,4,wxEXPAND)
209
210 self.sizer_line2_left = wxBoxSizer(wxHORIZONTAL)
211 self.sizer_line2_left.Add(self.lbl_firstname,3,wxGROW|wxALIGN_CENTER_VERTICAL,5)
212 self.sizer_line2_left.Add(self.txt_firstname,7,wxEXPAND)
213 self.sizer_line2_left.Add(0,0,1)
214 self.sizer_line2_left.Add(self.lbl_sex,2,wxGROW|wxALIGN_CENTER_VERTICAL,5)
215 self.sizer_line2_left.Add(self.combo_sex,4,wxEXPAND)
216
217 self.sizer_line3_left = wxBoxSizer(wxHORIZONTAL)
218 self.sizer_line3_left.Add(self.lbl_preferredname,3,wxGROW|wxALIGN_CENTER_VERTICAL,5)
219 self.sizer_line3_left.Add(self.txt_preferred,7,wxEXPAND)
220 self.sizer_line3_left.Add(1,0,7)
221
222 self.sizer_line4_left = wxBoxSizer(wxHORIZONTAL)
223 self.sizer_line4_left.Add(1,0,3)
224 self.sizer_line4_left.Add(self.cb_preferredname,7,wxEXPAND)
225 self.sizer_line4_left.Add(1,0,7)
226
227 self.sizer_line6_left = wxBoxSizer(wxHORIZONTAL)
228 self.sizer_line6_left.Add(self.lbl_line6gap,1,wxEXPAND)
229
230
231
232 sizer_lblstreet = wxBoxSizer(wxVERTICAL)
233 sizer_lblstreet.Add(self.lbl_street,1, wxEXPAND)
234
235
236
237
238 self.sizer_line7_left = wxBoxSizer(wxHORIZONTAL)
239 self.sizer_line7_left.Add(0,0,1)
240
241
242
243
244 sizer_respostal = wxBoxSizer(wxVERTICAL)
245 sizer_respostal.Add(self.cb_addressresidence,1,wxEXPAND)
246 sizer_respostal.Add(self.cb_addresspostal,1,wxEXPAND)
247
248 self.sizer_line7_left = wxBoxSizer(wxHORIZONTAL)
249 self.sizer_line7_left.Add(sizer_lblstreet,3,wxALIGN_CENTER_VERTICAL,5)
250 self.sizer_line7_left.Add(self.txt_address,7,wxEXPAND)
251 self.sizer_line7_left.Add(0,0,1)
252 self.sizer_line7_left.Add(sizer_respostal,6,wxEXPAND)
253
254
255
256 self.sizer_line8_left = wxBoxSizer(wxHORIZONTAL)
257 self.sizer_line8_left.Add(self.lbl_suburb,3,wxALIGN_CENTER_VERTICAL,5)
258 self.sizer_line8_left.Add(self.txt_suburb,7,wxEXPAND)
259 self.sizer_line8_left.Add(0,0,1)
260 self.sizer_line8_left.Add(self.lbl_zip,3,wxALIGN_CENTER_VERTICAL,5)
261 self.sizer_line8_left.Add(self.txt_zip,3,wxEXPAND)
262
263
264
265 self.sizer_line9_left = wxBoxSizer(wxHORIZONTAL)
266 self.sizer_line9_left.Add(self.lbl_address_s,3,wxALIGN_CENTER_VERTICAL,5)
267 self.sizer_line9_left.Add(self.addresslist,14,wxEXPAND)
268
269
270
271 self.leftside = wxBoxSizer(wxVERTICAL)
272 self.leftside.Add(self.sizer_line1_left,0,wxEXPAND|wxALL,1)
273 self.leftside.Add(self.sizer_line2_left,0,wxEXPAND|wxALL,1)
274 self.leftside.Add(self.sizer_line3_left,0,wxEXPAND|wxALL,1)
275 self.leftside.Add(self.sizer_line4_left,0,wxEXPAND|wxALL,1)
276 self.leftside.Add(self.sizer_line6_left,0,wxEXPAND|wxALL,1)
277 self.leftside.Add(self.sizer_line7_left,0,wxEXPAND|wxALL,1)
278 self.leftside.Add(self.sizer_line8_left,0,wxEXPAND|wxALL,1)
279 self.leftside.Add(self.sizer_line9_left,0,wxEXPAND|wxALL,1)
280
281
282
283 self.sizer_line0_right = wxBoxSizer(wxHORIZONTAL)
284 self.sizer_line1_right = wxBoxSizer(wxHORIZONTAL)
285 self.sizer_line2_right = wxBoxSizer(wxHORIZONTAL)
286 self.sizer_line3_right = wxBoxSizer(wxHORIZONTAL)
287 self.sizer_line4_right = wxBoxSizer(wxHORIZONTAL)
288 self.sizer_line5_right = wxBoxSizer(wxHORIZONTAL)
289 self.sizer_line6_right = wxBoxSizer(wxHORIZONTAL)
290 self.sizer_line7_right = wxBoxSizer(wxHORIZONTAL)
291 self.sizer_line8_right = wxBoxSizer(wxHORIZONTAL)
292 self.sizer_line9_right = wxBoxSizer(wxHORIZONTAL)
293 self.sizer_line10_right = wxBoxSizer(wxHORIZONTAL)
294 self.sizer_line11_right = wxBoxSizer(wxHORIZONTAL)
295
296 self.sizer_line1_right.Add(self.lbl_birthdate,2,wxALIGN_CENTER_VERTICAL,0)
297 self.sizer_line1_right.Add(self.txt_birthdate,2,wxALIGN_LEFT)
298 self.sizer_line1_right.Add(self.lbl_maritalstatus,2,wxALIGN_CENTRE,0)
299 self.sizer_line1_right.Add(self.combo_maritalstatus, 2, wxALIGN_CENTER_VERTICAL,0)
300
301 self.sizer_line2_right.Add(self.lbl_occupation,2,wxALIGN_CENTER_VERTICAL,0)
302 self.sizer_line2_right.Add(self.txt_occupation,6,wxEXPAND)
303
304 self.sizer_line3_right.Add(self.lbl_birthplace,2,wxALIGN_CENTER_VERTICAL,0)
305 self.sizer_line3_right.Add(self.txt_countryofbirth,6,wxEXPAND)
306
307 self.sizer_line4_right.Add(self.lbl_nextofkin, 2,wxALIGN_CENTER_VERTICAL,0)
308 self.sizer_line4_right.Add(self.btn_browseNOK,2, wxALIGN_CENTER_VERTICAL)
309
310 self.sizer_line4_right.Add(self.lbl_relationship,2, wxALIGN_CENTER_VERTICAL,0)
311 self.sizer_line4_right.Add(self.combo_relationship,2,wxEXPAND)
312
313 self.sizer_gap_vertical =wxBoxSizer(wxVERTICAL)
314 self.sizer_gap_vertical.Add(1,47,1)
315 self.sizer_line5_right.Add(self.lbl_addressNOK,2,wxEXPAND)
316 self.sizer_line5_right.Add(self.txt_nameNOK, 6,wxEXPAND)
317 self.sizer_line5_right.AddSizer(self.sizer_gap_vertical)
318
319
320
321
322 self.sizer_contacts = wxBoxSizer(wxVERTICAL)
323 self.sizer_line6_right.Add(self.lbl_homephone, 3,wxALIGN_CENTRE,0)
324 self.sizer_line6_right.Add(self.txt_homephone, 5,wxEXPAND)
325 self.sizer_line6_right.Add(0,0,1)
326 self.sizer_contacts.Add(self.sizer_line6_right,0,wxEXPAND)
327 self.sizer_line7_right.Add(self.lbl_workphone,3,wxALIGN_CENTRE,0)
328 self.sizer_line7_right.Add(self.txt_workphone, 5,wxEXPAND)
329 self.sizer_line7_right.Add(0,0,1)
330 self.sizer_contacts.Add(self.sizer_line7_right,0,wxEXPAND)
331 self.sizer_line8_right.Add(self.lbl_fax,3,wxALIGN_CENTRE,0)
332 self.sizer_line8_right.Add(self.txt_fax, 5,wxEXPAND)
333 self.sizer_line8_right.Add(0,0,1)
334 self.sizer_contacts.Add(self.sizer_line8_right,0,wxEXPAND)
335 self.sizer_line9_right.Add(self.lbl_email,3,wxALIGN_CENTRE,0)
336 self.sizer_line9_right.Add(self.txt_email, 5,wxEXPAND)
337 self.sizer_line9_right.Add(0,0,1)
338 self.sizer_contacts.Add(self.sizer_line9_right,0,wxEXPAND)
339 self.sizer_line10_right.Add(self.lbl_web,3,wxALIGN_CENTRE,0)
340 self.sizer_line10_right.Add(self.txt_web, 5,wxEXPAND)
341 self.sizer_line10_right.Add(0,0,1)
342 self.sizer_contacts.Add(self.sizer_line10_right,0,wxEXPAND)
343 self.sizer_line11_right.Add(self.lbl_mobile,3,wxALIGN_CENTRE,0)
344 self.sizer_line11_right.Add(self.txt_mobile, 5,wxEXPAND)
345 self.sizer_line11_right.Add(0,0,1)
346 self.sizer_contacts.Add(self.sizer_line11_right,0,wxEXPAND)
347 self.sizer_photo = wxBoxSizer(wxVERTICAL)
348
349 self.sizer_photo.Add(self.patientpicture,3,wxALIGN_CENTER_HORIZONTAL,0)
350 self.sizer_photo.Add(self.btn_photo_aquire,1,wxALIGN_CENTER_HORIZONTAL,0)
351 self.sizer_photo.Add(self.btn_photo_export,1,wxALIGN_CENTER_HORIZONTAL,0)
352 self.sizer_photo.Add(self.btn_photo_import,1,wxALIGN_CENTER_HORIZONTAL,0)
353 self.sizer_contactsandphoto = wxBoxSizer(wxHORIZONTAL)
354 self.sizer_contactsandphoto.AddSizer(self.sizer_contacts,6,wxALIGN_CENTER_VERTICAL,0)
355 self.sizer_contactsandphoto.AddSizer(self.sizer_photo,2,wxALIGN_CENTER_VERTICAL,0)
356 self.rightside = wxBoxSizer(wxVERTICAL)
357 self.rightside.Add(self.sizer_line1_right,0,wxEXPAND|wxALL,1)
358 self.rightside.Add(self.sizer_line2_right,0,wxEXPAND|wxALL,1)
359 self.rightside.Add(self.sizer_line3_right,0,wxEXPAND|wxALL,1)
360 self.rightside.Add(self.sizer_line4_right,0,wxEXPAND|wxALL,1)
361 self.rightside.Add(self.sizer_line5_right,0,wxEXPAND|wxALL,1)
362 self.rightside.Add(self.sizer_contactsandphoto,0,wxEXPAND|wxALL,1)
363 self.mainsizer = wxBoxSizer(wxVERTICAL)
364 self.topsizer = wxBoxSizer(wxHORIZONTAL)
365 self.sizerunder = wxBoxSizer(wxHORIZONTAL)
366 self.sizerunder.AddSizer(self.leftside,10,wxEXPAND|wxALL,5)
367 self.sizerunder.Add(1,0,1)
368 self.sizerunder.AddSizer(self.rightside,10,wxEXPAND|wxALL,5)
369 self.mainsizer.Add(self.patientslist,3,wxEXPAND)
370 self.mainsizer.Add(self.sizerunder,0,wxEXPAND|wxALL,10)
371 self.SetSizer(self.mainsizer)
372 self.SetAutoLayout(True)
373 self.Show(False)
374
375
377 pat_id = event.GetData ()
378 index = event.GetIndex ()
379 gmLog.gmDefLog.Log (gmLog.lInfo, "selected patient ID %s" % pat_id)
380 pat_title = self.patientslist.GetItem (index, 0).GetText ()
381 pat_fname = self.patientslist.GetItem (index, 1).GetText ()
382 pat_lname = self.patientslist.GetItem (index, 2).GetText ()
383 pat_dob = self.patientslist.GetItem (index, 3).GetText ()
384
385
386 kwds = {'title':pat_title, 'firstnames':pat_fname, 'lastnames':pat_lname, 'dob':pat_dob, 'ID':pat_id}
387 gmDispatcher.send ('post_patient_selection', sender='Terry Patient Selector', kwds=kwds )
388
390 self.patientslist.SetQueryStr (gmPatientNameQuery.MakeQuery (name), service='personalia')
391 self.patientslist.RunQuery ()
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427 if __name__ == "__main__":
428 import gmGuiBroker
429 app = wxPyWidgetTester(size = (800, 600))
430 app.SetWidget(PatientsPanel, -1)
431 app.MainLoop()
432
433