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

Source Code for Module Gnumed.wxpython.gmAU_VaccV01

  1  # -*- coding: ISO-8859-1 -*- 
  2  # generated by wxGlade 0.4cvs on Sat Dec 31 00:13:54 2005 
  3   
  4  import wx 
  5  from Gnumed.pycommon import gmDispatcher 
  6  from Gnumed.business import gmPerson, gmVaccination 
  7   
  8  #utilities  
  9   
10 -def expand_tree(t, root, nonzero = -1):
11 if not nonzero: 12 return 13 t.Expand(root) 14 c, cookie = t.GetFirstChild(root) 15 #import pdb 16 #pdb.set_trace() 17 while c.IsOk(): 18 t.Expand(c) 19 if t.GetChildrenCount(c) > 0: 20 expand_tree(t, c, nonzero -1 ) 21 c, cookie = t.GetNextChild(root, cookie)
22
23 -def stringify_days( d):
24 orig_d = d 25 if not d: 26 return ' none' 27 unit= ' days' 28 29 if abs(d - int(d) ) < 0.001: 30 d = int(d) 31 32 if d < 0.5 : 33 d *= 24 34 d = int(d) 35 unit=' hours' 36 37 elif d > 29: 38 unit = ' months' 39 d /= 30 40 41 if d <> int (d/10) * 10: 42 d = int( d* 10) / 10 43 44 if d > 23 : 45 unit = ' years' 46 d = orig_d / 365 47 48 if d <> int (d/10) * 10: 49 d = int ( d * 10) / 10 50 51 return str(d) + unit
52 53 #<1136015544262341759wxGlade replace dependencies>
54 -class cAU_VaccV01Panel(wx.Panel):
55 - def __init__(self, *args, **kwds):
56 # begin wxGlade: cAU_VaccV01Panel.__init__ 57 kwds["style"] = wx.TAB_TRAVERSAL 58 wx.Panel.__init__(self, *args, **kwds) 59 self.notebook_1 = wx.Notebook(self, -1, style=0) 60 self.notebook_1_pane_2 = wx.Panel(self.notebook_1, -1) 61 self.window_1 = wx.SplitterWindow(self.notebook_1_pane_2, -1, style=wx.SP_3D|wx.SP_BORDER) 62 self.window_1_pane_2 = wx.Panel(self.window_1, -1) 63 self.window_1_pane_1 = wx.Panel(self.window_1, -1) 64 self.notebook_1_pane_1 = wx.Panel(self.notebook_1, -1) 65 self.window_2 = wx.SplitterWindow(self.notebook_1_pane_1, -1, style=wx.SP_3D|wx.SP_BORDER|wx.CLIP_CHILDREN) 66 self.window_3 = wx.SplitterWindow(self.window_2, -1, style=wx.CLIP_CHILDREN) 67 self.window_3_pane_2 = wx.Panel(self.window_3, -1) 68 self.window_3_pane_1 = wx.Panel(self.window_3, -1) 69 self.window_2_pane_1 = wx.Panel(self.window_2, -1) 70 self.sizer_20_staticbox = wx.StaticBox(self.window_3_pane_1, -1, "vaccs scheduled") 71 self.sizer_18_staticbox = wx.StaticBox(self.window_1_pane_1, -1, "Vacc Regimes - X selected , O - not selected") 72 self.sizer_19_staticbox = wx.StaticBox(self.window_1_pane_2, -1, "vaccinations in selected regimes") 73 self.sizer_21_staticbox = wx.StaticBox(self.window_2_pane_1, -1, "Vacc Given") 74 self.list_ctrl_1 = wx.ListCtrl(self.window_2_pane_1, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) 75 self.tree_ctrl_2 = wx.TreeCtrl(self.window_3_pane_1, -1, style=wx.TR_HAS_BUTTONS|wx.TR_NO_LINES|wx.TR_HIDE_ROOT|wx.TR_DEFAULT_STYLE|wx.SUNKEN_BORDER) 76 self.label_2 = wx.StaticText(self.window_3_pane_1, -1, "vaccinations given") 77 self.list_box_1 = wx.ListBox(self.window_3_pane_1, -1, choices=[]) 78 self.label_3 = wx.StaticText(self.window_3_pane_2, -1, "date") 79 self.combo_box_1 = wx.ComboBox(self.window_3_pane_2, -1, choices=[], style=wx.CB_DROPDOWN) 80 self.checkbox_1 = wx.CheckBox(self.window_3_pane_2, -1, "mark schedule\nupto current age") 81 self.label_9 = wx.StaticText(self.window_3_pane_2, -1, "narrative") 82 self.text_ctrl_1 = wx.TextCtrl(self.window_3_pane_2, -1, "", style=wx.TE_MULTILINE) 83 self.label_4 = wx.StaticText(self.window_3_pane_2, -1, "vacc") 84 self.checkbox_dtpa = wx.CheckBox(self.window_3_pane_2, -1, "DTPa") 85 self.checkbox_2_ipv = wx.CheckBox(self.window_3_pane_2, -1, "IPV") 86 self.checkbox_paed_hepb = wx.CheckBox(self.window_3_pane_2, -1, "paed HepB") 87 self.checkbox_hib = wx.CheckBox(self.window_3_pane_2, -1, "HIB") 88 self.checkbox_7pneumo = wx.CheckBox(self.window_3_pane_2, -1, "7VPneumo") 89 self.checkbox_varicella = wx.CheckBox(self.window_3_pane_2, -1, "varicella") 90 self.checkbox_mmr = wx.CheckBox(self.window_3_pane_2, -1, "MMR") 91 self.checkbox_mening_c = wx.CheckBox(self.window_3_pane_2, -1, "mening-C") 92 self.checkbox_tick_enceph = wx.CheckBox(self.window_3_pane_2, -1, "tick-borne encephalitis") 93 self.static_line_1 = wx.StaticLine(self.window_3_pane_2, -1) 94 self.checkbox_opv = wx.CheckBox(self.window_3_pane_2, -1, "OPV") 95 self.label_8 = wx.StaticText(self.window_3_pane_2, -1, " not listed", style=wx.ALIGN_RIGHT) 96 self.combo_box_3 = wx.ComboBox(self.window_3_pane_2, -1, choices=[], style=wx.CB_DROPDOWN) 97 self.checkbox_Dtpa = wx.CheckBox(self.window_3_pane_2, -1, "Dtpa( less antigen, >3prev)") 98 self.checkbox_ADT = wx.CheckBox(self.window_3_pane_2, -1, "ADT") 99 self.checkbox_tettox = wx.CheckBox(self.window_3_pane_2, -1, "Tet Tox") 100 self.static_line_2 = wx.StaticLine(self.window_3_pane_2, -1) 101 self.checkbox_23vpneum = wx.CheckBox(self.window_3_pane_2, -1, "23VPneum") 102 self.checkbox_influenza = wx.CheckBox(self.window_3_pane_2, -1, "influenza") 103 self.static_line_3 = wx.StaticLine(self.window_3_pane_2, -1) 104 self.checkbox_paed_hepa = wx.CheckBox(self.window_3_pane_2, -1, "paed HepA") 105 self.checkbox_adult_hepa = wx.CheckBox(self.window_3_pane_2, -1, "adult HepA") 106 self.checkbox_adult_hepb = wx.CheckBox(self.window_3_pane_2, -1, "adult HepB") 107 self.checkbox_typhoid = wx.CheckBox(self.window_3_pane_2, -1, "typhoid") 108 self.checkbox_mening_acwy = wx.CheckBox(self.window_3_pane_2, -1, "mening-ACWY") 109 self.checkbox_yellow_fever = wx.CheckBox(self.window_3_pane_2, -1, "yellow fever") 110 self.checkbox_cholera = wx.CheckBox(self.window_3_pane_2, -1, "cholera") 111 self.static_line_4 = wx.StaticLine(self.window_3_pane_2, -1) 112 self.checkbox_rabies = wx.CheckBox(self.window_3_pane_2, -1, "rabies") 113 self.checkbox_japan_enceph = wx.CheckBox(self.window_3_pane_2, -1, "Japanese Enceph") 114 self.checkbox_qfever = wx.CheckBox(self.window_3_pane_2, -1, "Q Fever") 115 self.label_5 = wx.StaticText(self.window_3_pane_2, -1, "batch no") 116 self.combo_box_2 = wx.ComboBox(self.window_3_pane_2, -1, choices=[], style=wx.CB_DROPDOWN) 117 self.checkbox_18 = wx.CheckBox(self.window_3_pane_2, -1, "save batch no") 118 self.button_2 = wx.Button(self.window_3_pane_2, -1, "delete this no") 119 self.label_6 = wx.StaticText(self.window_3_pane_2, -1, "site") 120 self.radio_box_side = wx.RadioBox(self.window_3_pane_2, -1, "side", choices=["left", "right"], majorDimension=0, style=wx.RA_SPECIFY_COLS) 121 self.radio_box_site = wx.RadioBox(self.window_3_pane_2, -1, "site", choices=["thigh", "deltoid", "gluteal"], majorDimension=0, style=wx.RA_SPECIFY_ROWS) 122 self.radio_box_route = wx.RadioBox(self.window_3_pane_2, -1, "route", choices=["im", "sc", "po"], majorDimension=0, style=wx.RA_SPECIFY_ROWS) 123 self.button_1 = wx.Button(self.window_3_pane_2, -1, "add vaccination /\nnarrative / override", style=wx.BU_RIGHT) 124 self.tree_ctrl_1 = wx.TreeCtrl(self.window_1_pane_1, -1, style=wx.TR_HAS_BUTTONS|wx.TR_NO_LINES|wx.TR_HIDE_ROOT|wx.TR_DEFAULT_STYLE|wx.SUNKEN_BORDER) 125 self.list_ctrl_2 = wx.ListCtrl(self.window_1_pane_2, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER) 126 127 self.__set_properties() 128 self.__do_layout() 129 130 self.Bind(wx.EVT_LIST_DELETE_ITEM, self.delete_vacc_history_item, self.list_ctrl_1) 131 self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.vacc_history_item_activated, self.list_ctrl_1) 132 self.Bind(wx.EVT_LISTBOX_DCLICK, self.double_clicked_vaccination_given, self.list_box_1) 133 self.Bind(wx.EVT_TEXT, self.date_being_entered, self.combo_box_1) 134 self.Bind(wx.EVT_COMBOBOX, self.select_combo_date, self.combo_box_1) 135 self.Bind(wx.EVT_TEXT, self.narrative_text, self.text_ctrl_1) 136 self.Bind(wx.EVT_CHECKBOX, self.combo_with_hep_b_selected, self.checkbox_hib) 137 self.Bind(wx.EVT_TEXT, self.unlisted_text_changed, self.combo_box_3) 138 self.Bind(wx.EVT_COMBOBOX, self.unlisted_combo_selected, self.combo_box_3) 139 self.Bind(wx.EVT_TEXT, self.check_for_similiar_batchno, self.combo_box_2) 140 self.Bind(wx.EVT_COMBOBOX, self.get_batchno_for_vacc, self.combo_box_2) 141 self.Bind(wx.EVT_BUTTON, self.delete_this_batchno, self.button_2) 142 self.Bind(wx.EVT_BUTTON, self.add_vaccination, self.button_1) 143 self.Bind(wx.EVT_TREE_DELETE_ITEM, self.deleting_node, self.tree_ctrl_1) 144 self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.activating_node, self.tree_ctrl_1) 145 # end wxGlade 146 147 # gnumed events 148 gmDispatcher.connect(signal = u'post_patient_selection', receiver=self._on_post_patient_selection)
149 150
151 - def __set_properties(self):
152 # begin wxGlade: cAU_VaccV01Panel.__set_properties 153 self.list_box_1.SetMinSize((145, 63)) 154 self.combo_box_1.SetSelection(-1) 155 self.checkbox_1.SetFont(wx.Font(6, wx.MODERN, wx.NORMAL, wx.LIGHT, 0, "")) 156 self.combo_box_3.SetSelection(-1) 157 self.combo_box_2.SetSelection(-1) 158 self.radio_box_side.SetSelection(0) 159 self.radio_box_site.SetSelection(0) 160 self.radio_box_route.SetSelection(0)
161 # end wxGlade 162
163 - def __do_layout(self):
164 # begin wxGlade: cAU_VaccV01Panel.__do_layout 165 sizer_1 = wx.BoxSizer(wx.HORIZONTAL) 166 sizer_17 = wx.BoxSizer(wx.HORIZONTAL) 167 sizer_19 = wx.StaticBoxSizer(self.sizer_19_staticbox, wx.HORIZONTAL) 168 sizer_18 = wx.StaticBoxSizer(self.sizer_18_staticbox, wx.HORIZONTAL) 169 sizer_14 = wx.BoxSizer(wx.HORIZONTAL) 170 sizer_25 = wx.BoxSizer(wx.HORIZONTAL) 171 grid_sizer_1 = wx.FlexGridSizer(6, 2, 0, 0) 172 sizer_4 = wx.BoxSizer(wx.HORIZONTAL) 173 sizer_11 = wx.BoxSizer(wx.HORIZONTAL) 174 sizer_5 = wx.BoxSizer(wx.VERTICAL) 175 sizer_13 = wx.BoxSizer(wx.HORIZONTAL) 176 sizer_12 = wx.BoxSizer(wx.HORIZONTAL) 177 sizer_10 = wx.BoxSizer(wx.HORIZONTAL) 178 sizer_9 = wx.BoxSizer(wx.HORIZONTAL) 179 sizer_8 = wx.BoxSizer(wx.HORIZONTAL) 180 sizer_15 = wx.BoxSizer(wx.HORIZONTAL) 181 sizer_7 = wx.BoxSizer(wx.HORIZONTAL) 182 sizer_6 = wx.BoxSizer(wx.HORIZONTAL) 183 sizer_16 = wx.BoxSizer(wx.HORIZONTAL) 184 sizer_2 = wx.BoxSizer(wx.VERTICAL) 185 sizer_22 = wx.BoxSizer(wx.VERTICAL) 186 sizer_24 = wx.BoxSizer(wx.HORIZONTAL) 187 sizer_3 = wx.BoxSizer(wx.VERTICAL) 188 sizer_20 = wx.StaticBoxSizer(self.sizer_20_staticbox, wx.HORIZONTAL) 189 sizer_21 = wx.StaticBoxSizer(self.sizer_21_staticbox, wx.HORIZONTAL) 190 sizer_21.Add(self.list_ctrl_1, 1, wx.EXPAND, 0) 191 self.window_2_pane_1.SetAutoLayout(True) 192 self.window_2_pane_1.SetSizer(sizer_21) 193 sizer_21.Fit(self.window_2_pane_1) 194 sizer_21.SetSizeHints(self.window_2_pane_1) 195 sizer_20.Add(self.tree_ctrl_2, 1, wx.EXPAND, 0) 196 sizer_3.Add(sizer_20, 1, wx.EXPAND, 0) 197 sizer_3.Add(self.label_2, 0, wx.ADJUST_MINSIZE, 0) 198 sizer_3.Add(self.list_box_1, 0, wx.EXPAND|wx.ADJUST_MINSIZE, 0) 199 sizer_24.Add(sizer_3, 1, wx.EXPAND, 0) 200 self.window_3_pane_1.SetAutoLayout(True) 201 self.window_3_pane_1.SetSizer(sizer_24) 202 sizer_24.Fit(self.window_3_pane_1) 203 sizer_24.SetSizeHints(self.window_3_pane_1) 204 grid_sizer_1.Add(self.label_3, 0, wx.ADJUST_MINSIZE, 0) 205 sizer_22.Add(self.combo_box_1, 0, wx.ADJUST_MINSIZE, 0) 206 sizer_22.Add(self.checkbox_1, 0, wx.ALL|wx.ADJUST_MINSIZE, 5) 207 sizer_2.Add(sizer_22, 0, wx.EXPAND, 0) 208 sizer_16.Add(sizer_2, 0, wx.EXPAND, 0) 209 sizer_16.Add(self.label_9, 0, wx.ADJUST_MINSIZE, 0) 210 sizer_16.Add(self.text_ctrl_1, 1, wx.ADJUST_MINSIZE, 0) 211 grid_sizer_1.Add(sizer_16, 0, wx.EXPAND, 0) 212 grid_sizer_1.Add(self.label_4, 0, wx.ADJUST_MINSIZE, 0) 213 sizer_6.Add(self.checkbox_dtpa, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 19) 214 sizer_6.Add(self.checkbox_2_ipv, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 26) 215 sizer_6.Add(self.checkbox_paed_hepb, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 20) 216 sizer_6.Add(self.checkbox_hib, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 12) 217 sizer_6.Add(self.checkbox_7pneumo, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 12) 218 sizer_5.Add(sizer_6, 0, wx.ALL|wx.EXPAND|wx.ADJUST_MINSIZE, 0) 219 sizer_7.Add(self.checkbox_varicella, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 17) 220 sizer_7.Add(self.checkbox_mmr, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 16) 221 sizer_7.Add(self.checkbox_mening_c, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 16) 222 sizer_7.Add(self.checkbox_tick_enceph, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 16) 223 sizer_5.Add(sizer_7, 0, wx.EXPAND, 0) 224 sizer_5.Add(self.static_line_1, 0, wx.EXPAND, 0) 225 sizer_15.Add(self.checkbox_opv, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 23) 226 sizer_15.Add(self.label_8, 0, wx.ALIGN_RIGHT|wx.ADJUST_MINSIZE, 0) 227 sizer_15.Add(self.combo_box_3, 1, wx.EXPAND|wx.ADJUST_MINSIZE, 0) 228 sizer_5.Add(sizer_15, 0, wx.EXPAND, 0) 229 sizer_8.Add(self.checkbox_Dtpa, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 20) 230 sizer_8.Add(self.checkbox_ADT, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 14) 231 sizer_8.Add(self.checkbox_tettox, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 14) 232 sizer_5.Add(sizer_8, 0, wx.EXPAND, 0) 233 sizer_5.Add(self.static_line_2, 0, wx.EXPAND, 0) 234 sizer_9.Add(self.checkbox_23vpneum, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 12) 235 sizer_9.Add(self.checkbox_influenza, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 20) 236 sizer_5.Add(sizer_9, 0, wx.EXPAND, 0) 237 sizer_5.Add(self.static_line_3, 0, wx.EXPAND, 0) 238 sizer_10.Add(self.checkbox_paed_hepa, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 20) 239 sizer_10.Add(self.checkbox_adult_hepa, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 18) 240 sizer_10.Add(self.checkbox_adult_hepb, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 20) 241 sizer_5.Add(sizer_10, 0, wx.EXPAND, 0) 242 sizer_12.Add(self.checkbox_typhoid, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 26) 243 sizer_12.Add(self.checkbox_mening_acwy, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 20) 244 sizer_12.Add(self.checkbox_yellow_fever, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 20) 245 sizer_12.Add(self.checkbox_cholera, 0, wx.ADJUST_MINSIZE, 20) 246 sizer_5.Add(sizer_12, 0, wx.EXPAND, 0) 247 sizer_5.Add(self.static_line_4, 0, wx.EXPAND, 0) 248 sizer_13.Add(self.checkbox_rabies, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 23) 249 sizer_13.Add(self.checkbox_japan_enceph, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 15) 250 sizer_13.Add(self.checkbox_qfever, 0, wx.RIGHT|wx.ADJUST_MINSIZE, 18) 251 sizer_5.Add(sizer_13, 0, wx.EXPAND, 0) 252 grid_sizer_1.Add(sizer_5, 0, wx.EXPAND, 0) 253 grid_sizer_1.Add(self.label_5, 0, wx.ADJUST_MINSIZE, 0) 254 sizer_11.Add(self.combo_box_2, 1, wx.ADJUST_MINSIZE, 0) 255 sizer_11.Add(self.checkbox_18, 0, wx.ADJUST_MINSIZE, 0) 256 sizer_11.Add(self.button_2, 0, wx.ADJUST_MINSIZE, 0) 257 grid_sizer_1.Add(sizer_11, 0, wx.EXPAND, 0) 258 grid_sizer_1.Add(self.label_6, 0, wx.ADJUST_MINSIZE, 0) 259 sizer_4.Add(self.radio_box_side, 0, wx.ADJUST_MINSIZE, 0) 260 sizer_4.Add(self.radio_box_site, 0, wx.ADJUST_MINSIZE, 0) 261 sizer_4.Add(self.radio_box_route, 0, wx.ADJUST_MINSIZE, 0) 262 sizer_4.Add(self.button_1, 0, wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL|wx.ADJUST_MINSIZE|wx.FIXED_MINSIZE, 0) 263 grid_sizer_1.Add(sizer_4, 0, wx.EXPAND, 0) 264 grid_sizer_1.Add((20, 20), 0, wx.ADJUST_MINSIZE, 0) 265 sizer_25.Add(grid_sizer_1, 0, wx.EXPAND, 0) 266 self.window_3_pane_2.SetAutoLayout(True) 267 self.window_3_pane_2.SetSizer(sizer_25) 268 sizer_25.Fit(self.window_3_pane_2) 269 sizer_25.SetSizeHints(self.window_3_pane_2) 270 self.window_3.SplitVertically(self.window_3_pane_1, self.window_3_pane_2) 271 self.window_2.SplitHorizontally(self.window_2_pane_1, self.window_3, 10) 272 sizer_14.Add(self.window_2, 1, wx.EXPAND, 0) 273 self.notebook_1_pane_1.SetAutoLayout(True) 274 self.notebook_1_pane_1.SetSizer(sizer_14) 275 sizer_14.Fit(self.notebook_1_pane_1) 276 sizer_14.SetSizeHints(self.notebook_1_pane_1) 277 sizer_18.Add(self.tree_ctrl_1, 1, wx.EXPAND, 0) 278 self.window_1_pane_1.SetAutoLayout(True) 279 self.window_1_pane_1.SetSizer(sizer_18) 280 sizer_18.Fit(self.window_1_pane_1) 281 sizer_18.SetSizeHints(self.window_1_pane_1) 282 sizer_19.Add(self.list_ctrl_2, 1, wx.EXPAND, 0) 283 self.window_1_pane_2.SetAutoLayout(True) 284 self.window_1_pane_2.SetSizer(sizer_19) 285 sizer_19.Fit(self.window_1_pane_2) 286 sizer_19.SetSizeHints(self.window_1_pane_2) 287 self.window_1.SplitHorizontally(self.window_1_pane_1, self.window_1_pane_2) 288 sizer_17.Add(self.window_1, 1, wx.EXPAND, 0) 289 self.notebook_1_pane_2.SetAutoLayout(True) 290 self.notebook_1_pane_2.SetSizer(sizer_17) 291 sizer_17.Fit(self.notebook_1_pane_2) 292 sizer_17.SetSizeHints(self.notebook_1_pane_2) 293 self.notebook_1.AddPage(self.notebook_1_pane_1, "vaccinations") 294 self.notebook_1.AddPage(self.notebook_1_pane_2, "enrolled vaccinations") 295 sizer_1.Add(self.notebook_1, 1, wx.EXPAND, 0) 296 self.SetAutoLayout(True) 297 self.SetSizer(sizer_1) 298 sizer_1.Fit(self) 299 sizer_1.SetSizeHints(self)
300 # end wxGlade 301
302 - def delete_vacc_history_item(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
303 print "Event handler `delete_vacc_history_item' not implemented" 304 event.Skip()
305
306 - def vacc_history_item_activated(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
307 print "Event handler `vacc_history_item_activated' not implemented" 308 event.Skip() 309
310 - def recommended_vacc_given(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
311 print "Event handler `recommended_vacc_given' not implemented" 312 event.Skip() 313
314 - def recommended_vacc_selected(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
315 print "Event handler `recommended_vacc_selected' not implemented" 316 event.Skip() 317
318 - def double_clicked_vaccination_given(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
319 print "Event handler `double_clicked_vaccination_given' not implemented" 320 event.Skip() 321
322 - def date_being_entered(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
323 print "Event handler `date_being_entered' not implemented" 324 event.Skip() 325
326 - def select_combo_date(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
327 print "Event handler `select_combo_date' not implemented" 328 event.Skip() 329
330 - def combo_with_hep_b_selected(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
331 print "Event handler `combo_with_hep_b_selected' not implemented" 332 event.Skip() 333
334 - def unlisted_text_changed(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
335 print "Event handler `unlisted_text_changed' not implemented" 336 event.Skip() 337
338 - def unlisted_combo_selected(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
339 print "Event handler `unlisted_combo_selected' not implemented" 340 event.Skip() 341
342 - def check_for_similiar_batchno(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
343 print "Event handler `check_for_similiar_batchno' not implemented" 344 event.Skip() 345
346 - def get_batchno_for_vacc(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
347 print "Event handler `get_batchno_for_vacc' not implemented" 348 event.Skip() 349
350 - def delete_this_batchno(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
351 print "Event handler `delete_this_batchno' not implemented" 352 event.Skip() 353
354 - def add_vaccination(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
355 print "Event handler `add_vaccination' not implemented" 356 event.Skip() 357 l = [ self.checkbox_dtpa.GetValue(), 358 self.checkbox_2_ipv .GetValue(), 359 self.checkbox_paed_hepb.GetValue(), 360 self.checkbox_hib.GetValue(), 361 self.checkbox_7pneumo .GetValue(), 362 self.checkbox_varicella.GetValue(), 363 self.checkbox_mmr .GetValue(), 364 self.checkbox_mening_c .GetValue(), 365 self.checkbox_tick_enceph .GetValue(), 366 self.checkbox_opv .GetValue(), 367 self.checkbox_Dtpa.GetValue(), 368 self.checkbox_ADT.GetValue(), 369 self.checkbox_tettox.GetValue(), 370 self.checkbox_23vpneum.GetValue(), 371 self.checkbox_influenza .GetValue(), 372 self.checkbox_paed_hepa.GetValue(), 373 self.checkbox_adult_hepa.GetValue(), 374 self.checkbox_adult_hepb.GetValue(), 375 self.checkbox_typhoid.GetValue(), 376 self.checkbox_mening_acwy.GetValue(), 377 self.checkbox_yellow_fever.GetValue(), 378 self.checkbox_cholera.GetValue(), 379 self.checkbox_rabies.GetValue(), 380 self.checkbox_japan_enceph.GetValue(), 381 self.checkbox_qfever.GetValue() 382 383 ] 384 [dtp , ipv, phb ,hib, p7, var, mmr, mc, tick, opv, dTpa, adt, tt, p23, flu, pha, aha, ahb, ty, acwy, yf, chol, rab, jap, qf ] = l 385 386 # nb the indication strings must be identical if the same indication 387 # so 'pol' and 'polio' are not allowed 388 389 390 to_ind = zip ( [ ('diph','tet', 'pert'),('polio',), ( 'hepatitis B',), ('haemophilus',), ('pneum',), ('varicella',), ( 'measles','mumps', 'rubella'), ('meningococcus C',), ('tick',), ('polio',), ('diph', 'tet', 'pert'), ('diph','tet'), ('tet',), ('pneum',), ('influ',), ('hepatitis A',), ('hepatitis A',), ('hepatitis B',), ('typhoid',), ('meningococcus ACWY',), ('yellow fever',), ('cholera',), ('rabies',), ('japanese enc',), ('Q fever',) ], l ) 391 for i , c in to_ind: 392 print "DEBUG to_ind ", i, c 393 def get_unique_indications ( indset_chosen_list): 394 """indset_chosen_list is a list of 2-tuples, 395 the 2-tuple is a tuple of indications, and a boolean value 'chosen' 396 397 returns matching vaccines that have all the indications chosen 398 399 usage: a tuple of indications can represent a combo vaccine's set of indications. 400 """ 401 all_ind = [] 402 for ind, chosen in to_ind: 403 if chosen: 404 for x in ind: 405 if x not in all_ind: 406 all_ind.append(x) 407 return all_ind 408 all_ind = get_unique_indications ( to_ind) 409 #import pdb 410 #pdb.set_trace() 411 vaccines = gmVaccination.get_matching_vaccines_for_indications(all_ind) 412 413 nchecked = len( [ x for x in l if x] ) 414 415 416 class NoVaccChosen ( Exception): 417 pass 418 class IllegalCombo (Exception): 419 pass 420 421 def _or(x, y): 422 return x or y 423 424 try: 425 426 # can replace this with dynamic checking of vaccine and lnk_vaccine2ind 427 # 428 # if nchecked == 0: 429 # raise NoVaccChosen, _('No vaccine was selected') 430 # 431 # elif nchecked == 1: 432 # pass # ok single vaccine 433 # 434 # 435 # elif nchecked == 2 and dtp and not ipv: 436 # raise IllegalCombo, _('only binary vaccine with dtp is with ipv') 437 # 438 # elif nchecked == 3 and dtp and not ipv and not hepb : 439 # raise IllegalCombo, _('Illegal combination not recognized') 440 # 441 # elif nchecked == 4 and dtp and not ipv and not hepb and not hib: 442 # raise IllegalCombo, _('5 dtp vaccine combo is with IPV and hep B and HIB') 443 # 444 # 445 # 446 # elif nchecked == 2 and hib and not ipv and not phb : 447 # raise IllegalCombo, _('hib combo with ipv or paed hep B only') 448 # 449 # elif nchecked == 2 and phb and not pha and not ty: 450 # raise IllegalCombo, _('paed hep b only with paed hep a or hib or typhoid ') 451 # 452 # elif nchecked == 2 and aha and not ty and not ahb: 453 # raise IllegalCombo, _('adult hep A only in combo with typhoid or adult hep b') 454 # else: 455 # raise IllegalCombo, _('unrecognized combined vaccination') 456 # 457 if not nchecked: 458 raise NoVaccChosen, _("No vaccines were chosen") 459 if not len(vaccines): 460 raise IllegalCombo, _("Combination of indications , %s , not found in any vaccine" % ', '.join ( all_ind) ) 461 except NoVaccChosen, s: 462 wx.MessageDialog( self, str(s), style = wx.OK).ShowModal() 463 return 464 465 except IllegalCombo , s: 466 wx.MessageDialog( self, str(s), style = wx.OK).ShowModal() 467 return 468 469 wx.MessageDialog( self,"Accepted add", style = wx.OK).ShowModal() 470 471
472 - def _on_post_patient_selection(self):
473 474 self._populate_vaccination_history_list() 475 self._populate_vacc_regime_tree() 476 self._populate_missing_vaccinations()
477
478 - def _populate_vaccination_history_list(self):
479 # populate vaccination history 480 print self, "got on patient selected" 481 p = gmPerson.gmCurrentPatient() 482 emr = p.get_emr() 483 vv = emr.get_vaccinations() 484 l = self.list_ctrl_1 485 l.ClearAll() 486 cols = [ _('Date'), _('Vaccine'), _('Sequence'), _('Batch'), _('Site'), _('Narrative'), _('Vaccinator') ] 487 for c, i in zip(cols, range(len(cols)) ): 488 l.InsertColumn( i, c) 489 490 fields = [ 'date', 'vaccine', 'seq_no', 'batch_no', 'site', 'narrative', 'pk_provider' ] 491 for v, i in zip( vv, range(len(vv))): 492 for f, j in zip(fields,range(len(fields)) ): 493 if j == 0: 494 l.InsertStringItem( i, str(v[f])) 495 else: 496 l.SetStringItem(i, j, str(v[f]) ) 497 498 for i in range(len(cols)): 499 l.SetColumnWidth( i, wx.LIST_AUTOSIZE) 500 w1 = l.GetColumnWidth(i) 501 l.SetColumnWidth( i, wx.LIST_AUTOSIZE_USEHEADER) 502 w2 = l.GetColumnWidth(i) 503 if w1 > w2: 504 l.SetColumnWidth(i, w1)
505 506 507 #print vv 508 #import pdb 509 #pdb.set_trace)
510 - def _update_age_ordered_vacc_tree( self, t, v, rec_node, age_node, last_min_age):
511 s = '#'+str(v['seq_no'])+ ' : ' + v['regime'] 512 s += '; min age due = ' + stringify_days( v['min_age_due']) 513 514 s += ' ; min interval: ' + stringify_days(v['min_interval']) 515 516 if v['min_age_due'] <> last_min_age: 517 518 age_node = t.AppendItem( rec_node, 'Minimum age due : ' + stringify_days(v['min_age_due']) ) 519 last_min_age = v['min_age_due'] 520 521 522 def_node = t.AppendItem( age_node, s, data = wx.TreeItemData( v) ) 523 return t, v, age_node, last_min_age, def_node
524
525 - def _populate_vacc_regime_tree(self):
526 # populate vacc regime choice tree 527 p = gmPerson.gmCurrentPatient() 528 self._vreg, self._active_recs = gmVaccination.get_vacc_regimes_by_recommender_ordered( int ( p.ID ) ) 529 vreg = self._vreg 530 t = self.tree_ctrl_1 531 t.DeleteAllItems() 532 root = t.AddRoot( _('Vaccinations by Recommender (X = patient on regime, O = patient not on regime) ') ) 533 534 self._rec_nodes = [] 535 for recommender in vreg[1]: 536 537 538 rec_node = t.AppendItem( root, str(recommender) , data = wx.TreeItemData(recommender) ) 539 self._rec_nodes .append(rec_node) 540 541 last_min_age = -1 542 age_node = None 543 544 on_rec = False 545 546 for v in vreg[0][recommender]: 547 t, v, age_node, last_min_age, def_node = self._update_age_ordered_vacc_tree( t, v, rec_node, age_node, last_min_age) 548 549 if int(v['pk_regime']) in self._active_recs: 550 551 marker = ' - x' 552 colour = wx.GREEN 553 else: 554 marker = ' - O' 555 colour = wx.RED 556 557 t.SetItemText( def_node, t.GetItemText(def_node) + marker) 558 t.SetItemTextColour( def_node, colour) 559 expand_tree(t, root , 2)
560
561 - def _populate_missing_vaccinations(self):
562 t = self.tree_ctrl_2 563 t.DeleteAllItems() 564 p = gmPerson.gmCurrentPatient() 565 emr = p.get_emr() 566 mv = gmVaccination.get_missing_vaccinations_ordered_min_due( p.ID ) 567 lmv = [ dict( [ (field, v[i] ) for field, i in zip( 568 ['indication', 'regime', 569 'pk_regime', 570 'pk_recommended_by', 571 'seq_no' , 572 'min_age_due', 573 'max_age_due', 574 'min_interval' ] , range( len(v) ) ) ] ) for v in mv ] 575 576 age_node, last_min_age = None, -1 577 root = t.AddRoot(_('enrolled regime vaccinations not yet given') ) 578 for v in lmv: 579 t, v, age_node, last_min_age, def_node = self._update_age_ordered_vacc_tree( t, v, root, age_node, last_min_age) 580 expand_tree(t, root, 2) 581 582 print "DEBUG missing vaccs len=", len(mv)
583 #for x in mv: 584 # print x 585 #import pdb 586 #pbd.set_trace() 587
588 - def narrative_text(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
589 print "Event handler `narrative_text' not implemented" 590 event.Skip() 591
592 - def deleting_node(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
593 print "Event handler `deleting_node' not implemented" 594 event.Skip() 595
596 - def activating_node(self, event): # wxGlade: cAU_VaccV01Panel.<event_handler>
597 print "Event handler `activating_node' not implemented" 598 n = event.GetItem() 599 600 event.Skip(1) 601 t = self.tree_ctrl_1 602 #import pdb 603 #pdb.set_trace() 604 605 if n in self._rec_nodes: 606 recommender = t.GetItemData( n).GetData() 607 active = True 608 for v in self._vreg[0][recommender]: 609 if not v['pk_regime'] in self._active_recs: 610 active = False 611 break 612 613 if active: 614 msg = " unenrolling in the selected recommenders' regimes ( will fail if any vaccinations linked to regime)" 615 else: 616 msg = "enroll in regime of recommender " + str( recommender) 617 618 answ = wx.MessageDialog(self, _("Proceed with " + msg + "?")).ShowModal() 619 failures = [] 620 success = [] 621 #import pdb 622 #pdb.set_trace() 623 if answ == wx.ID_OK and not active: 624 for v in self._vreg[0][recommender]: 625 result = False 626 id = gmPerson.gmCurrentPatient().ID 627 if v['pk_regime'] in success: 628 continue 629 if id: 630 result,msg = gmVaccination.put_patient_on_schedule(id, v['pk_regime']) 631 if not result: 632 failures.append(v) 633 else: 634 success.append(v['pk_regime']) 635 if len(failures): 636 wx.MessageDialog(self, _("Failed to enrol patient in %s") % ', '.join( [ f['regime'] for f in failures] ) , style = wx.OK ).ShowModal() 637 638 if answ == wx.ID_OK and active: 639 for v in self._vreg[0][recommender]: 640 result = False 641 id = gmPerson.gmCurrentPatient().ID 642 if v['pk_regime'] in success: 643 continue 644 if id: 645 result,msg = gmVaccination.remove_patient_from_schedule(id, v['pk_regime']) 646 if not result: 647 failures.append(v) 648 else: 649 success.append(v['pk_regime']) 650 if len(failures): 651 wx.MessageDialog(self, _("Failed to delist patient from %s") % ', '.join( [ f['regime'] for f in failures] ) , style = wx.OK ).ShowModal() 652 653 self._on_post_patient_selection() 654 655 # end of class cAU_VaccV01Panel 656