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

Source Code for Module Gnumed.wxpython.gmOrganizationWidgets

  1  """GNUmed organization handling widgets. 
  2   
  3  copyright: authors 
  4  """ 
  5  #============================================================ 
  6  __author__ = "K.Hilbert" 
  7  __license__ = "GPL v2 or later (details at http://www.gnu.org)" 
  8   
  9  import logging, sys 
 10   
 11   
 12  import wx 
 13   
 14   
 15  if __name__ == '__main__': 
 16          sys.path.insert(0, '../../') 
 17  from Gnumed.pycommon import gmTools 
 18  from Gnumed.pycommon import gmMatchProvider 
 19  from Gnumed.pycommon import gmDispatcher 
 20   
 21  from Gnumed.business import gmOrganization 
 22   
 23  from Gnumed.wxpython import gmListWidgets 
 24  from Gnumed.wxpython import gmEditArea 
 25  from Gnumed.wxpython import gmPhraseWheel 
 26  from Gnumed.wxpython import gmPersonContactWidgets 
 27  from Gnumed.wxpython import gmAddressWidgets 
 28  from Gnumed.wxpython import gmGuiHelpers 
 29   
 30   
 31  _log = logging.getLogger('gm.organization') 
 32   
 33  #============================================================ 
 34  # organizational units API 
 35  #------------------------------------------------------------ 
36 -def edit_org_unit(parent=None, org_unit=None, single_entry=False, org=None):
37 ea = cOrgUnitEAPnl(parent = parent, id = -1) 38 ea.data = org_unit 39 ea.mode = gmTools.coalesce(org_unit, 'new', 'edit') 40 dlg = gmEditArea.cGenericEditAreaDlg2(parent = parent, id = -1, edit_area = ea, single_entry = single_entry) 41 if org is not None: 42 ea.organization = org 43 dlg.SetTitle(gmTools.coalesce(org_unit, _('Adding new organizational unit'), _('Editing organizational unit'))) 44 if dlg.ShowModal() == wx.ID_OK: 45 dlg.Destroy() 46 return True 47 dlg.Destroy() 48 return False
49 50 #============================================================
51 -def select_org_unit(parent=None, msg=None, no_parent=False):
52 53 if no_parent: 54 parent = None 55 else: 56 if parent is None: 57 parent = wx.GetApp().GetTopWindow() 58 59 #-------------------- 60 def new(): 61 manage_orgs(parent = parent, no_parent = no_parent) 62 return True
63 #-------------------- 64 def refresh(lctrl): 65 units = gmOrganization.get_org_units(order_by = 'organization, unit, l10n_unit_category') 66 items = [ [ 67 u['organization'], 68 u['unit'], 69 gmTools.coalesce(u['l10n_unit_category'], u''), 70 u['pk_org_unit'] 71 ] for u in units ] 72 73 lctrl.set_string_items(items = items) 74 lctrl.set_data(data = units) 75 #-------------------- 76 if msg is None: 77 msg = _("Organizations and units thereof.\n") 78 79 return gmListWidgets.get_choices_from_list ( 80 parent = parent, 81 msg = msg, 82 caption = _('Unit selection ...'), 83 columns = [_('Organization'), _('Unit'), _('Unit type'), '#'], 84 can_return_empty = False, 85 single_selection = True, 86 refresh_callback = refresh, 87 new_callback = new 88 ) 89 90 #============================================================
91 -class cOrgUnitPhraseWheel(gmPhraseWheel.cPhraseWheel):
92
93 - def __init__(self, *args, **kwargs):
94 query = u""" 95 SELECT DISTINCT ON (data) * FROM ( 96 SELECT * FROM (( 97 98 SELECT 99 pk_org_unit 100 AS data, 101 unit || coalesce(' (' || l10n_unit_category || ')', '') || ': ' || organization || ' (' || l10n_organization_category || ')' 102 AS list_label, 103 unit || ' (' || organization || ')' 104 AS field_label 105 FROM 106 dem.v_org_units 107 WHERE 108 unit %(fragment_condition)s 109 110 ) UNION ALL ( 111 112 SELECT 113 pk_org_unit 114 AS data, 115 coalesce(l10n_unit_category || ' ', '') || '"' || unit || '": ' || organization || ' (' || l10n_organization_category || ')' 116 AS list_label, 117 unit || ' (' || organization || ')' 118 AS field_label 119 FROM 120 dem.v_org_units 121 WHERE 122 l10n_unit_category %(fragment_condition)s 123 OR 124 unit_category %(fragment_condition)s 125 126 ) UNION ALL ( 127 128 SELECT 129 pk_org_unit 130 AS data, 131 organization || ': ' || unit || coalesce(' (' || l10n_unit_category || ')', '') 132 AS list_label, 133 unit || ' (' || organization || ')' 134 AS field_label 135 FROM 136 dem.v_org_units 137 WHERE 138 organization %(fragment_condition)s 139 140 )) AS all_matches 141 ORDER BY list_label 142 ) AS ordered_matches 143 LIMIT 50 144 """ 145 mp = gmMatchProvider.cMatchProvider_SQL2(queries=query) 146 mp.setThresholds(1, 3, 5) 147 gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs) 148 self.SetToolTipString(_("Select an organizational unit.")) 149 self.matcher = mp
150 #--------------------------------------------------------
151 - def _get_data_tooltip(self):
152 if self.GetData() is None: 153 return None 154 unit = self._data2instance() 155 if unit is None: 156 return None 157 return u'\n'.join(unit.format(with_address = True))
158 #--------------------------------------------------------
159 - def _data2instance(self):
160 if self.GetData() is None: 161 return None 162 return gmOrganization.cOrgUnit(aPK_obj = self.GetData())
163 #============================================================
164 -class cOrgUnitsManagerPnl(gmListWidgets.cGenericListManagerPnl):
165 """A list for managing organizational units.""" 166
167 - def __init__(self, *args, **kwargs):
168 169 try: 170 self.__org = kwargs['org'] 171 del kwargs['org'] 172 except KeyError: 173 self.__org = None 174 175 gmListWidgets.cGenericListManagerPnl.__init__(self, *args, **kwargs) 176 177 self.refresh_callback = self.refresh 178 self.new_callback = self._add 179 self.edit_callback = self._edit 180 self.delete_callback = self._del 181 182 self.__show_none_if_no_org = True 183 self.__init_ui() 184 self.__refresh()
185 #-------------------------------------------------------- 186 # external API 187 #--------------------------------------------------------
188 - def refresh(self, lctrl=None):
189 self.__refresh()
190 #-------------------------------------------------------- 191 # event handlers 192 #--------------------------------------------------------
193 - def _add(self):
194 return edit_org_unit(parent = self, org_unit = None, single_entry = False, org = self.__org)
195 #--------------------------------------------------------
196 - def _edit(self, item):
197 return edit_org_unit(parent = self, org_unit = item, single_entry = True)
198 #--------------------------------------------------------
199 - def _del(self, item):
200 return gmOrganization.delete_org_unit(unit = item['pk_org_unit'])
201 #--------------------------------------------------------
202 - def _on_list_item_focused(self, event):
203 pass
204 #-------------------------------------------------------- 205 # internal helpers 206 #--------------------------------------------------------
207 - def __init_ui(self):
208 self._LCTRL_items.set_columns(columns = [ _('Organizational Unit'), _('Unit Category'), u'#' ]) 209 self._LCTRL_items.SetToolTipString(_('Units (sites, parts, departments, branches, ...) of organizations registered in GNUmed.')) 210 self._LCTRL_items.item_tooltip_callback = self.get_tooltip
211 #self._LCTRL_items.set_column_widths(widths = [wx.LIST_AUTOSIZE, wx.LIST_AUTOSIZE, wx.LIST_AUTOSIZE]) 212 #--------------------------------------------------------
213 - def get_tooltip(self, unit):
214 if unit is None: 215 return _('Units (sites, parts, departments, branches, ...) of organizations registered in GNUmed.') 216 return u'\n'.join(unit.format(with_address = True, with_org = True, with_comms = True))
217 #--------------------------------------------------------
218 - def __refresh(self):
219 220 msg_template = _('Units of: %s') 221 222 if self.__org is None: 223 self._BTN_add.Enable(False) 224 self._BTN_edit.Enable(False) 225 self._BTN_remove.Enable(False) 226 pk = None 227 self.message = msg_template % _('<no organization selected>') 228 if self.__show_none_if_no_org: 229 self._LCTRL_items.set_string_items(items = None) 230 return 231 else: 232 self._BTN_add.Enable(True) 233 pk = self.__org['pk_org'] 234 org_str = u'%s (%s)' % ( 235 self.__org['organization'], 236 self.__org['l10n_category'] 237 ) 238 self.message = msg_template % org_str 239 240 units = gmOrganization.get_org_units(order_by = 'unit, l10n_unit_category', org = pk) 241 items = [ [ 242 u['unit'], 243 gmTools.coalesce(u['l10n_unit_category'], u''), 244 u['pk_org_unit'] 245 ] for u in units ] 246 247 self._LCTRL_items.set_string_items(items) 248 self._LCTRL_items.set_data(units) 249 250 for idx in range(len(units)): 251 unit = units[idx] 252 if unit['is_praxis_branch']: 253 self._LCTRL_items.SetItemTextColour(idx, col=wx.NamedColour('RED'))
254 #-------------------------------------------------------- 255 # properties 256 #--------------------------------------------------------
257 - def _get_org(self):
258 return self.__org
259
260 - def _set_org(self, org):
261 self.__org = org 262 self.__refresh()
263 264 org = property(_get_org, _set_org) 265 #--------------------------------------------------------
266 - def _get_show_none_if_no_org(self):
267 return self.__show_none_if_no_org
268
269 - def _set_show_none_if_no_org(self, show_none_if_no_org):
270 if show_none_if_no_org == self.__show_none_if_no_org: 271 return 272 if show_none_if_no_org: 273 self.__show_none_if_no_org = True 274 else: 275 self.__show_none_if_no_org = False 276 self.__refresh()
277 278 show_none_if_no_org = property(_get_show_none_if_no_org, _set_show_none_if_no_org)
279 280 #============================================================ 281 # org unit edit area 282 from Gnumed.wxGladeWidgets import wxgOrgUnitEAPnl 283
284 -class cOrgUnitEAPnl(wxgOrgUnitEAPnl.wxgOrgUnitEAPnl, gmEditArea.cGenericEditAreaMixin):
285
286 - def __init__(self, *args, **kwargs):
287 288 try: 289 data = kwargs['unit'] 290 del kwargs['unit'] 291 except KeyError: 292 data = None 293 294 wxgOrgUnitEAPnl.wxgOrgUnitEAPnl.__init__(self, *args, **kwargs) 295 gmEditArea.cGenericEditAreaMixin.__init__(self) 296 297 self.mode = 'new' 298 self.data = data 299 if data is not None: 300 self.mode = 'edit'
301 302 # self.__init_ui() 303 #---------------------------------------------------------------- 304 # def __init_ui(self): 305 # pass 306 #---------------------------------------------------------------- 307 # generic Edit Area mixin API 308 #----------------------------------------------------------------
309 - def _valid_for_save(self):
310 validity = True 311 312 if self._PRW_category.GetData() is not None: 313 self._PRW_category.display_as_valid(True) 314 else: 315 if self._PRW_category.GetValue().strip() == u'': 316 self._PRW_category.display_as_valid(True) 317 else: 318 validity = False 319 self._PRW_category.display_as_valid(False) 320 self._PRW_category.SetFocus() 321 322 if self._PRW_unit.GetData() is not None: 323 self._PRW_unit.display_as_valid(True) 324 else: 325 if self._PRW_unit.GetValue().strip() != u'': 326 self._PRW_unit.display_as_valid(True) 327 else: 328 validity = False 329 self._PRW_unit.display_as_valid(False) 330 self._PRW_unit.SetFocus() 331 332 if self._PRW_org.GetData() is None: 333 validity = False 334 self._PRW_org.display_as_valid(False) 335 self._PRW_org.SetFocus() 336 else: 337 self._PRW_org.display_as_valid(True) 338 339 return validity
340 #----------------------------------------------------------------
341 - def _save_as_new(self):
342 data = gmOrganization.create_org_unit ( 343 pk_organization = self._PRW_org.GetData(), 344 unit = self._PRW_unit.GetValue().strip() 345 ) 346 data['pk_category_unit'] = self._PRW_category.GetData() 347 data.save() 348 349 self.data = data 350 return True
351 #----------------------------------------------------------------
352 - def _save_as_update(self):
353 self.data['pk_org'] = self._PRW_org.GetData() 354 self.data['unit'] = self._PRW_unit.GetValue().strip() 355 self.data['pk_category_unit'] = self._PRW_category.GetData() 356 self.data.save() 357 return True
358 #----------------------------------------------------------------
359 - def _refresh_as_new(self):
360 self._PRW_org.SetText(value = u'', data = None) 361 self._PRW_unit.SetText(value = u'', data = None) 362 self._PRW_category.SetText(value = u'', data = None) 363 364 self._PRW_unit.SetFocus()
365 #----------------------------------------------------------------
367 self._PRW_org.SetText(value = self.data['organization'], data = self.data['pk_org']) 368 self._PRW_unit.SetText(value = u'', data = None) 369 self._PRW_category.SetText(value = self.data['unit_category'], data = self.data['pk_category_unit']) 370 371 self._PRW_unit.SetFocus()
372 #----------------------------------------------------------------
373 - def _refresh_from_existing(self):
374 self._PRW_org.SetText(value = self.data['organization'], data = self.data['pk_org']) 375 self._PRW_unit.SetText(value = self.data['unit'], data = self.data['pk_org_unit']) 376 self._PRW_category.SetText(value = self.data['unit_category'], data = self.data['pk_category_unit']) 377 378 self._PRW_unit.SetFocus()
379 #----------------------------------------------------------------
380 - def _set_org(self, org):
381 self._PRW_org.SetText(value = org['organization'], data = org['pk_org'])
382 383 organization = property(lambda x:x, _set_org)
384 #============================================================ 385 from Gnumed.wxGladeWidgets import wxgOrgUnitAddressPnl 386
387 -class cOrgUnitAddressPnl(wxgOrgUnitAddressPnl.wxgOrgUnitAddressPnl):
388
389 - def __init__(self, *args, **kwargs):
390 391 wxgOrgUnitAddressPnl.wxgOrgUnitAddressPnl.__init__(self, *args, **kwargs) 392 393 self.__unit = None
394 #-------------------------------------------------------- 395 # internal helpers 396 #--------------------------------------------------------
397 - def __refresh(self):
398 if self.__unit is None: 399 self.message = _('<no unit selected>') 400 self._PRW_address_searcher.SetText(u'', None) 401 self._PRW_address_searcher.Enable(False) 402 self._PRW_address_searcher.display_as_disabled(True) 403 self._BTN_save_picked_address.Enable(False) 404 self._BTN_add_new_address.Enable(False) 405 else: 406 if self.__unit['l10n_unit_category'] is None: 407 cat = u'' 408 left_delim = u'' 409 right_delim = u'' 410 else: 411 cat = u'%s ' % self.__unit['l10n_unit_category'] 412 left_delim = gmTools.u_left_double_angle_quote 413 right_delim = gmTools.u_right_double_angle_quote 414 self.message = u'%s%s%s%s' % ( 415 cat, 416 left_delim, 417 self.__unit['unit'], 418 right_delim 419 ) 420 self._PRW_address_searcher.Enable(True) 421 self._PRW_address_searcher.address = self.__unit['pk_address'] 422 self._PRW_address_searcher.Enable(True) 423 self._PRW_address_searcher.display_as_disabled(False) 424 self._BTN_save_picked_address.Enable(True) 425 self._BTN_add_new_address.Enable(True)
426 #-------------------------------------------------------- 427 # event handlers 428 #--------------------------------------------------------
430 if self._PRW_address_searcher.GetData() is None: 431 if self._PRW_address_searcher.GetValue().strip() != u'': 432 gmDispatcher.send(signal = 'statustext', msg = _('Invalid address selection.')) 433 self._PRW_address_searcher.display_as_valid(False) 434 self._PRW_address_searcher.SetFocus() 435 return 436 437 self._PRW_address_searcher.display_as_valid(True) 438 439 self.__unit['pk_address'] = self._PRW_address_searcher.GetData() 440 self.__unit.save() 441 self.__refresh()
442 #--------------------------------------------------------
443 - def _on_add_new_address_button_pressed(self, event):
444 ea = gmAddressWidgets.cAddressEAPnl(self, -1) 445 ea.address_holder = self.__unit 446 ea.type_is_editable = False 447 dlg = gmEditArea.cGenericEditAreaDlg2(self, -1, edit_area = ea) 448 dlg.SetTitle(_('Adding new address')) 449 if dlg.ShowModal() != wx.ID_OK: 450 return False 451 self.__refresh() 452 return True
453 #--------------------------------------------------------
454 - def _on_manage_addresses_button_pressed(self, event):
455 picked_address = gmAddressWidgets.manage_addresses(parent = self) 456 if picked_address is None: 457 return 458 459 question = u'%s\n\n %s\n' % ( 460 _('Link the following address to the organizational unit ?'), 461 u'\n '.join(picked_address.format()) 462 ) 463 464 link_it = gmGuiHelpers.gm_show_question ( 465 title = _('Linking selected address'), 466 question = question 467 ) 468 if not link_it: 469 return 470 471 self._PRW_address_searcher.address = picked_address['pk_address'] 472 self._PRW_address_searcher.display_as_valid(True) 473 self.__unit['pk_address'] = self._PRW_address_searcher.GetData() 474 self.__unit.save()
475 #-------------------------------------------------------- 476 # properties 477 #--------------------------------------------------------
478 - def _get_unit(self):
479 return self.__unit
480
481 - def _set_unit(self, unit):
482 self.__unit = unit 483 self.__refresh()
484 485 unit = property(_get_unit, _set_unit) 486 #--------------------------------------------------------
487 - def _get_message(self):
488 return self._LBL_message.GetLabel()
489
490 - def _set_message(self, msg):
491 if msg is None: 492 self._LBL_message.Hide() 493 self._LBL_message.SetLabel(u'') 494 else: 495 self._LBL_message.SetLabel(msg) 496 self._LBL_message.Show() 497 self.Layout()
498 499 message = property(_get_message, _set_message)
500 #============================================================ 501 # organizations API 502 #------------------------------------------------------------
503 -def manage_orgs(parent=None, no_parent=False):
504 505 if no_parent: 506 parent = None 507 else: 508 if parent is None: 509 parent = wx.GetApp().GetTopWindow() 510 511 dlg = cOrganizationManagerDlg(parent, -1) 512 dlg.ShowModal() 513 dlg.Destroy()
514 #============================================================
515 -def edit_org(parent=None, org=None, single_entry=False):
516 ea = cOrganizationEAPnl(parent = parent, id = -1) 517 ea.data = org 518 ea.mode = gmTools.coalesce(org, 'new', 'edit') 519 dlg = gmEditArea.cGenericEditAreaDlg2(parent = parent, id = -1, edit_area = ea, single_entry = single_entry) 520 dlg.SetTitle(gmTools.coalesce(org, _('Adding new organization'), _('Editing organization'))) 521 if dlg.ShowModal() == wx.ID_OK: 522 dlg.Destroy() 523 return True 524 dlg.Destroy() 525 return False
526 #============================================================
527 -class cOrganizationPhraseWheel(gmPhraseWheel.cPhraseWheel):
528
529 - def __init__(self, *args, **kwargs):
530 query = u""" 531 SELECT DISTINCT ON (data) * FROM ( 532 SELECT * FROM (( 533 534 SELECT 535 pk_org 536 AS data, 537 organization || ' (' || l10n_category || ')' 538 AS list_label, 539 organization || ' (' || l10n_category || ')' 540 AS field_label 541 FROM 542 dem.v_orgs 543 WHERE 544 organization %(fragment_condition)s 545 546 ) UNION ALL ( 547 548 SELECT 549 pk_org 550 AS data, 551 l10n_category || ': ' || organization 552 AS list_label, 553 organization || ' (' || l10n_category || ')' 554 AS field_label 555 FROM 556 dem.v_orgs 557 WHERE 558 l10n_category %(fragment_condition)s 559 OR 560 category %(fragment_condition)s 561 562 )) AS all_matches 563 ORDER BY list_label 564 ) AS ordered_matches 565 LIMIT 50 566 """ 567 mp = gmMatchProvider.cMatchProvider_SQL2(queries=query) 568 mp.setThresholds(1, 3, 5) 569 gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs) 570 self.SetToolTipString(_("Select an organization.")) 571 self.matcher = mp 572 self.selection_only = True
573 574 #==================================================================== 575 from Gnumed.wxGladeWidgets import wxgOrganizationEAPnl 576
577 -class cOrganizationEAPnl(wxgOrganizationEAPnl.wxgOrganizationEAPnl, gmEditArea.cGenericEditAreaMixin):
578
579 - def __init__(self, *args, **kwargs):
580 581 try: 582 data = kwargs['organization'] 583 del kwargs['organization'] 584 except KeyError: 585 data = None 586 587 wxgOrganizationEAPnl.wxgOrganizationEAPnl.__init__(self, *args, **kwargs) 588 gmEditArea.cGenericEditAreaMixin.__init__(self) 589 590 self.mode = 'new' 591 self.data = data 592 if data is not None: 593 self.mode = 'edit'
594 595 #self.__init_ui() 596 #----------------------------------------------------------------
597 - def __init_ui(self):
598 self._PRW_org.selection_only = False
599 #---------------------------------------------------------------- 600 # generic Edit Area mixin API 601 #----------------------------------------------------------------
602 - def _valid_for_save(self):
603 validity = True 604 605 if self._PRW_category.GetData() is None: 606 validity = False 607 self._PRW_category.display_as_valid(False) 608 self._PRW_category.SetFocus() 609 else: 610 self._PRW_category.display_as_valid(True) 611 612 if self._PRW_org.GetValue().strip() == u'': 613 validity = False 614 self._PRW_org.display_as_valid(False) 615 self._PRW_org.SetFocus() 616 else: 617 self._PRW_org.display_as_valid(True) 618 619 # if self.mode == 'edit': 620 # if self._PRW_org.GetData() is None: 621 # validity = False 622 # self._PRW_org.display_as_valid(False) 623 # self._PRW_org.SetFocus() 624 # else: 625 # self._PRW_org.display_as_valid(True) 626 # else: 627 # if self._PRW_org.GetValue().strip() == u'': 628 # validity = False 629 # self._PRW_org.display_as_valid(False) 630 # self._PRW_org.SetFocus() 631 # else: 632 # if self._PRW_org.GetData() is not None: 633 # validity = False 634 # self._PRW_org.display_as_valid(False) 635 # self._PRW_org.SetFocus() 636 # else: 637 # self._PRW_org.display_as_valid(True) 638 639 return validity
640 #----------------------------------------------------------------
641 - def _save_as_new(self):
642 self.data = gmOrganization.create_org ( 643 organization = self._PRW_org.GetValue().strip(), 644 category = self._PRW_category.GetData() 645 ) 646 return True
647 #----------------------------------------------------------------
648 - def _save_as_update(self):
649 #self.data['pk_org'] = self._PRW_org.GetData() 650 self.data['organization'] = self._PRW_org.GetValue().strip() 651 self.data['pk_category_org'] = self._PRW_category.GetData() 652 self.data.save() 653 return True
654 #----------------------------------------------------------------
655 - def _refresh_as_new(self):
656 self._PRW_org.SetText(value = u'', data = None) 657 self._PRW_category.SetText(value = u'', data = None) 658 659 self._PRW_org.SetFocus()
660 #----------------------------------------------------------------
662 self._PRW_org.SetText(value = u'', data = None) 663 self._PRW_category.SetText(value = self.data['l10n_category'], data = self.data['pk_category_org']) 664 665 self._PRW_org.SetFocus()
666 #----------------------------------------------------------------
667 - def _refresh_from_existing(self):
668 self._PRW_org.SetText(value = self.data['organization'], data = self.data['pk_org']) 669 self._PRW_category.SetText(value = self.data['l10n_category'], data = self.data['pk_category_org']) 670 671 self._PRW_category.SetFocus()
672 673 #============================================================
674 -class cOrgCategoryPhraseWheel(gmPhraseWheel.cPhraseWheel):
675
676 - def __init__(self, *args, **kwargs):
677 query = u""" 678 SELECT DISTINCT ON (data) 679 * 680 FROM ( 681 SELECT 682 pk 683 AS data, 684 _(description) || ' (' || description || ')' 685 AS list_label, 686 _(description) 687 AS field_label 688 FROM 689 dem.org_category 690 WHERE 691 _(description) %(fragment_condition)s 692 OR 693 description %(fragment_condition)s 694 ORDER BY list_label 695 ) AS ordered_matches 696 LIMIT 50 697 """ 698 mp = gmMatchProvider.cMatchProvider_SQL2(queries=query) 699 mp.setThresholds(1, 3, 5) 700 gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs) 701 self.SetToolTipString(_("Select an organizational category.")) 702 self.matcher = mp 703 self.selection_only = True
704 705 #============================================================
706 -class cOrganizationsManagerPnl(gmListWidgets.cGenericListManagerPnl):
707 """A list for managing organizations.""" 708
709 - def __init__(self, *args, **kwargs):
710 711 gmListWidgets.cGenericListManagerPnl.__init__(self, *args, **kwargs) 712 713 self.refresh_callback = self.refresh 714 self.new_callback = self._add 715 self.edit_callback = self._edit 716 self.delete_callback = self._del 717 718 self.__init_ui() 719 self.refresh()
720 #-------------------------------------------------------- 721 # external API 722 #--------------------------------------------------------
723 - def refresh(self, lctrl=None):
724 orgs = gmOrganization.get_orgs(order_by = 'organization, l10n_category') 725 items = [ [o['organization'], o['l10n_category'], o['pk_org']] for o in orgs ] 726 self._LCTRL_items.set_string_items(items) 727 self._LCTRL_items.set_data(orgs) 728 729 for idx in range(len(orgs)): 730 org = orgs[idx] 731 if org['is_praxis']: 732 self._LCTRL_items.SetItemTextColour(idx, col=wx.NamedColour('RED')) 733 break
734 #-------------------------------------------------------- 735 # event handlers 736 #--------------------------------------------------------
737 - def _add(self):
738 return edit_org(parent = self, org = None, single_entry = False)
739 #--------------------------------------------------------
740 - def _edit(self, item):
741 return edit_org(parent = self, org = item, single_entry = True)
742 #--------------------------------------------------------
743 - def _del(self, item):
744 return gmOrganization.delete_org(organization = item['pk_org'])
745 #--------------------------------------------------------
746 - def _on_list_item_focused(self, event):
747 pass
748 #-------------------------------------------------------- 749 # internal helpers 750 #--------------------------------------------------------
751 - def __init_ui(self):
752 self._LCTRL_items.set_columns(columns = [_('Organization'), _('Category'), u'#']) 753 self._LCTRL_items.SetToolTipString(_('Organizations registered in GNUmed.')) 754 self._LCTRL_items.item_tooltip_callback = self.get_tooltip
755 #self._LCTRL_items.set_column_widths(widths = [wx.LIST_AUTOSIZE, wx.LIST_AUTOSIZE, wx.LIST_AUTOSIZE]) 756 #--------------------------------------------------------
757 - def get_tooltip(self, org):
758 if org is None: 759 return _('Organizations registered in GNUmed.') 760 return org.format()
761 #============================================================ 762 from Gnumed.wxGladeWidgets import wxgOrganizationManagerDlg 763
764 -class cOrganizationManagerDlg(wxgOrganizationManagerDlg.wxgOrganizationManagerDlg):
765
766 - def __init__(self, *args, **kwargs):
767 768 wxgOrganizationManagerDlg.wxgOrganizationManagerDlg.__init__(self, *args, **kwargs) 769 770 self.Centre(direction = wx.BOTH) 771 772 self._PNL_address.type_is_editable = False 773 self._PNL_orgs.select_callback = self._on_org_selected 774 self._PNL_units.select_callback = self._on_unit_selected 775 self._PNL_comms.message = _('Communication channels') 776 777 # FIXME: find proper button 778 #self._PNL_units.MoveAfterInTabOrder(self._PNL_orgs._BTN_) 779 780 self._on_org_selected(None) 781 self._PNL_orgs._LCTRL_items.SetFocus()
782 #-------------------------------------------------------- 783 # event handlers 784 #--------------------------------------------------------
785 - def _on_org_selected(self, item):
786 self._PNL_units.org = item 787 self._on_unit_selected(None)
788 #--------------------------------------------------------
789 - def _on_unit_selected(self, item):
790 self._PNL_address.unit = item 791 self._PNL_comms.channel_owner = item 792 if item is None: 793 self._PNL_comms._BTN_add.Enable(False) 794 else: 795 self._PNL_comms._BTN_add.Enable(True)
796 #============================================================ 797 # main 798 #------------------------------------------------------------ 799 if __name__ == "__main__": 800 801 if len(sys.argv) < 2: 802 sys.exit() 803 804 if sys.argv[1] != u'test': 805 sys.exit() 806 807 from Gnumed.pycommon import gmPG2 808 from Gnumed.pycommon import gmI18N 809 gmI18N.activate_locale() 810 gmI18N.install_domain() 811 812 #--------------------------------------------------------
813 - def test_org_prw():
814 app = wx.PyWidgetTester(size = (200, 50)) 815 pw = cOrganizationPhraseWheel(app.frame, -1) 816 app.frame.Show(True) 817 app.MainLoop()
818 #--------------------------------------------------------
819 - def test_org_unit_prw():
820 app = wx.PyWidgetTester(size = (200, 50)) 821 pw = cOrgUnitPhraseWheel(app.frame, -1) 822 app.frame.Show(True) 823 app.MainLoop()
824 #--------------------------------------------------------
825 - def test():
826 conn = gmPG2.get_connection() 827 app = wx.PyWidgetTester(size = (600, 600)) 828 dlg = cOrganizationManagerDlg(app.frame, -1, size = (600, 600)) 829 dlg.SetSize((600, 600)) 830 dlg.ShowModal() 831 # app.SetWidget(dlg, -1) 832 app.MainLoop()
833 #-------------------------------------------------------- 834 #test_org_unit_prw() 835 #test_org_prw() 836 test() 837 838 #====================================================================== 839