# Module `Gnumed.wxpython.gmMedicationPRWs`

GNUmed medication handling phrasewheels.

## Classes

`class cProductOrSubstancePhraseWheel (*args, **kwargs)`
  Expand source code

      class cProductOrSubstancePhraseWheel(gmPhraseWheel.cPhraseWheel):

              def __init__(self, *args, **kwargs):

                      mp = gmMedication.cProductOrSubstanceMatchProvider()
                      mp.setThresholds(1, 2, 4)
                      gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs)
                      self.SetToolTip(_('A substance with optional strength or a drug product.'))
                      self.matcher = mp
                      self.selection_only = False
                      self.phrase_separators = None
                      self.IS_PRODUCT = 1
                      self.IS_SUBSTANCE = 2
                      self.IS_COMPONENT = 3

              #--------------------------------------------------------
              def _data2instance(self, link_obj=None):
                      entry_type, pk = self.GetData(as_instance = False, can_create = False)
                      if entry_type == 1:
                              return gmMedication.cDrugProduct(aPK_obj = pk)
                      if entry_type == 2:
                              return gmMedication.cSubstance(aPK_obj = pk)
                      if entry_type == 3:
                              return gmMedication.cDrugComponent(aPK_obj = pk)
                      raise ValueError('entry type must be 1=drug product or 2=substance or 3=component')

  Standard single-value Phrasewheel.

  ### Ancestors

  - cPhraseWheel
  - cPhraseWheelBase
  - wx._core.TextCtrl
  - wx._core.Control
  - wx._core.Window
  - wx._core.WindowBase
  - wx._core.EvtHandler
  - wx._core.Object
  - wx._core.Trackable
  - wx._core.TextEntry
  - sip.wrapper
  - sip.simplewrapper

  ### Inherited members

  - `cPhraseWheel`:
    - `Disable`
    - `Enable`
    - `GetData`
    - `SetData`
    - `SetText`
    - `add_callback_on_lose_focus`
    - `add_callback_on_modified`
    - `add_callback_on_selection`
    - `add_callback_on_set_focus`
    - `display_as_valid`
`class cSubstanceIntakeObjectPhraseWheel (*args, **kwargs)`
  Expand source code

      class cSubstanceIntakeObjectPhraseWheel(gmPhraseWheel.cPhraseWheel):

              def __init__(self, *args, **kwargs):
                      mp = gmMedication.cSubstanceIntakeObjectMatchProvider()
                      mp.setThresholds(1, 2, 4)
                      gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs)
                      self.SetToolTip(_('A drug product.'))
                      self.matcher = mp
                      self.selection_only = True
                      self.phrase_separators = None

              #--------------------------------------------------------
              def _data2instance(self, link_obj=None):
                      pk = self.GetData(as_instance = False, can_create = False)
                      if pk is None:
                              return None
                      return gmMedication.cDrugProduct(aPK_obj = pk)

  Standard single-value Phrasewheel.

  ### Ancestors

  - cPhraseWheel
  - cPhraseWheelBase
  - wx._core.TextCtrl
  - wx._core.Control
  - wx._core.Window
  - wx._core.WindowBase
  - wx._core.EvtHandler
  - wx._core.Object
  - wx._core.Trackable
  - wx._core.TextEntry
  - sip.wrapper
  - sip.simplewrapper

  ### Inherited members

  - `cPhraseWheel`:
    - `Disable`
    - `Enable`
    - `GetData`
    - `SetData`
    - `SetText`
    - `add_callback_on_lose_focus`
    - `add_callback_on_modified`
    - `add_callback_on_selection`
    - `add_callback_on_set_focus`
    - `display_as_valid`
`class cSubstanceOrDosePhraseWheel (*args, **kwargs)`
  Expand source code

      class cSubstanceOrDosePhraseWheel(gmPhraseWheel.cPhraseWheel):
              """Matches a substance, by name, possibly with strength (then a dose).
              """
              def __init__(self, *args, **kwargs):
                      mp = gmMedication.cSubstanceDoseMatchProvider()
                      mp.setThresholds(2, 3, 5)
                      gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs)
                      self.SetToolTip(_('The substance the patient is taking.\n\nYou can enter/select a substance with or without a strength.'))
                      self.matcher = mp
                      self.selection_only = False
                      self.phrase_separators = None

              #--------------------------------------------------------
              def _data2instance(self, link_obj=None):
                      if not self._data:
                              return None

                      pk_subst, pk_dose = self.GetData(as_instance = False, can_create = False, link_obj = link_obj)
                      if not pk_subst:
                              return None, None

                      subst = gmMedication.cSubstance(aPK_obj = pk_subst)
                      if pk_dose:
                              dose = gmMedication.cSubstanceDose(aPK_obj = pk_dose)
                      else:
                              dose = None
                      return subst, dose

              #--------------------------------------------------------
              def _create_data(self, link_obj=None):
                      val = self.Value.strip()
                      if not val:
                              return

                      subst = gmMedication.create_substance(substance = val, link_obj = link_obj)
                      if not subst:
                              self.data = {}
                              return

                      self.SetText(value = subst['substance'], data = [subst['pk_substance'], None])

              #--------------------------------------------------------
              def _get_as_dose(self):
                      if not self._data:
                              return None

                      pk_dose = self.data[1]
                      if not pk_dose:
                              return None

                      return gmMedication.cSubstanceDose(aPK_obj = pk_dose)

              as_dose = property(_get_as_dose)

  Matches a substance, by name, possibly with strength (then a dose).

  ### Ancestors

  - cPhraseWheel
  - cPhraseWheelBase
  - wx._core.TextCtrl
  - wx._core.Control
  - wx._core.Window
  - wx._core.WindowBase
  - wx._core.EvtHandler
  - wx._core.Object
  - wx._core.Trackable
  - wx._core.TextEntry
  - sip.wrapper
  - sip.simplewrapper

  ### Instance variables

  `prop as_dose`
    Expand source code

        def _get_as_dose(self):
                if not self._data:
                        return None

                pk_dose = self.data[1]
                if not pk_dose:
                        return None

                return gmMedication.cSubstanceDose(aPK_obj = pk_dose)

  ### Inherited members

  - `cPhraseWheel`:
    - `Disable`
    - `Enable`
    - `GetData`
    - `SetData`
    - `SetText`
    - `add_callback_on_lose_focus`
    - `add_callback_on_modified`
    - `add_callback_on_selection`
    - `add_callback_on_set_focus`
    - `display_as_valid`
`class cSubstancePRW (*args, **kwargs)`
  Expand source code

      class cSubstancePRW(gmPhraseWheel.cPhraseWheel):
              """Matches a substance by name."""
              def __init__(self, *args, **kwargs):
                      SQL = """-- substance match provider
                              SELECT DISTINCT ON (substance)
                                      r_vs.substance AS field_label,
                                      r_vs.substance AS list_label,
                                      r_vs.pk_substance AS data
                              FROM ref.v_substances r_vs
                              WHERE r_vs.substance %(fragment_condition)s
                              ORDER BY r_vs.substance
                              LIMIT 30
                      """
                      mp = gmMatchProvider.cMatchProvider_SQL2(queries = SQL)
                      mp.setThresholds(1, 2, 4)
                      mp.word_separators = '[ \t=+&:@]+'
                      gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs)
                      self.SetToolTip(_('The substance the patient is taking.'))
                      self.matcher = mp
                      #self.matcher.print_queries = True
                      self.selection_only = False
                      self.phrase_separators = None

              #--------------------------------------------------------
              def _data2instance(self, link_obj=None):
                      pk = self.GetData(as_instance = False, can_create = False, link_obj = link_obj)
                      if pk is None:
                              return None

                      return gmMedication.cSubstance(aPK_obj = pk, link_obj = link_obj)

              #--------------------------------------------------------
              def _create_data(self, link_obj=None):
                      val = self.Value.strip()
                      if not val:
                              return

                      subst = gmMedication.create_substance (
                              substance = val,
                              link_obj = link_obj
                      )
                      if not subst:
                              self.data = {}
                              return

                      self.SetText(value = subst['substance'], data = subst['pk_substance'])

  Matches a substance by name.

  ### Ancestors

  - cPhraseWheel
  - cPhraseWheelBase
  - wx._core.TextCtrl
  - wx._core.Control
  - wx._core.Window
  - wx._core.WindowBase
  - wx._core.EvtHandler
  - wx._core.Object
  - wx._core.Trackable
  - wx._core.TextEntry
  - sip.wrapper
  - sip.simplewrapper

  ### Inherited members

  - `cPhraseWheel`:
    - `Disable`
    - `Enable`
    - `GetData`
    - `SetData`
    - `SetText`
    - `add_callback_on_lose_focus`
    - `add_callback_on_modified`
    - `add_callback_on_selection`
    - `add_callback_on_set_focus`
    - `display_as_valid`
`class cSubstancePatientNotesPhraseWheel (*args, **kwargs)`
  Expand source code

      class cSubstancePatientNotesPhraseWheel(gmPhraseWheel.cPhraseWheel):

              def __init__(self, *args, **kwargs):

                      SQL = """-- cSubstancePatientNotesPhraseWheel
                              SELECT DISTINCT ON (field_label)
                                      data, list_label, field_label
                              FROM ((
                                              SELECT
                                                      notes4patient
                                                              AS data,
                                                      notes4patient || ' (' || substance || ' ' || amount || ' ' || unit || ')'
                                                              AS list_label,
                                                      notes4patient
                                                              AS field_label
                                              FROM clin.v_intakes
                                              WHERE
                                                      notes4patient %(fragment_condition)s
                                                      %(ctxt_substance)s
                                      ) UNION (
                                              SELECT
                                                      notes4patient
                                                              AS data,
                                                      notes4patient || ' (' || substance || ' ' || amount || ' ' || unit || ')'
                                                              AS list_label,
                                                      notes4patient
                                                              AS field_label
                                              FROM clin.v_intakes
                                              WHERE
                                                      notes4patient %(fragment_condition)s
                                      )) AS notes
                              ORDER BY field_label
                              LIMIT 30"""
                      context = {'ctxt_substance': {
                              'where_part': 'AND substance = %(substance)s',
                              'placeholder': 'substance'
                      }}

                      mp = gmMatchProvider.cMatchProvider_SQL2(queries = SQL, context = context)
                      mp.setThresholds(1, 2, 4)
                      #mp.word_separators = '[ \t=+&:@]+'
                      gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs)
                      self.SetToolTip(_('Notes for the patient on this substance intake.'))
                      self.matcher = mp
                      self.selection_only = False

  Standard single-value Phrasewheel.

  ### Ancestors

  - cPhraseWheel
  - cPhraseWheelBase
  - wx._core.TextCtrl
  - wx._core.Control
  - wx._core.Window
  - wx._core.WindowBase
  - wx._core.EvtHandler
  - wx._core.Object
  - wx._core.Trackable
  - wx._core.TextEntry
  - sip.wrapper
  - sip.simplewrapper

  ### Inherited members

  - `cPhraseWheel`:
    - `Disable`
    - `Enable`
    - `GetData`
    - `SetData`
    - `SetText`
    - `add_callback_on_lose_focus`
    - `add_callback_on_modified`
    - `add_callback_on_selection`
    - `add_callback_on_set_focus`
    - `display_as_valid`
`class cSubstancePreparationPhraseWheel (*args, **kwargs)`
  Expand source code

      class cSubstancePreparationPhraseWheel(gmPhraseWheel.cPhraseWheel):

              def __init__(self, *args, **kwargs):

                      query = """
      SELECT DISTINCT ON (list_label)
              preparation AS data,
              preparation AS list_label,
              preparation AS field_label
      FROM ref.drug_product
      WHERE preparation %(fragment_condition)s
      ORDER BY list_label
      LIMIT 30"""
                      mp = gmMatchProvider.cMatchProvider_SQL2(queries = query)
                      mp.setThresholds(1, 2, 4)
                      gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs)
                      self.SetToolTip(_('The preparation (form) of the substance or product.'))
                      self.matcher = mp
                      self.selection_only = False

  Standard single-value Phrasewheel.

  ### Ancestors

  - cPhraseWheel
  - cPhraseWheelBase
  - wx._core.TextCtrl
  - wx._core.Control
  - wx._core.Window
  - wx._core.WindowBase
  - wx._core.EvtHandler
  - wx._core.Object
  - wx._core.Trackable
  - wx._core.TextEntry
  - sip.wrapper
  - sip.simplewrapper

  ### Inherited members

  - `cPhraseWheel`:
    - `Disable`
    - `Enable`
    - `GetData`
    - `SetData`
    - `SetText`
    - `add_callback_on_lose_focus`
    - `add_callback_on_modified`
    - `add_callback_on_selection`
    - `add_callback_on_set_focus`
    - `display_as_valid`
`class cSubstanceSchedulePhraseWheel (*args, **kwargs)`
  Expand source code

      class cSubstanceSchedulePhraseWheel(gmPhraseWheel.cPhraseWheel):

              def __init__(self, *args, **kwargs):

                      SQL = """
                              SELECT DISTINCT ON (narrative)
                                      narrative AS field_label,
                                      narrative AS list_label,
                                      narrative AS data
                              FROM clin.intake_regimen
                              WHERE narrative %(fragment_condition)s
                              ORDER BY narrative
                              LIMIT 50"""
                      mp = gmMatchProvider.cMatchProvider_SQL2(queries = SQL)
                      mp.setThresholds(1, 2, 4)
                      mp.word_separators = '[ \t=+&:@]+'
                      gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs)
                      self.SetToolTip(_('The schedule for taking this substance.'))
                      self.matcher = mp
                      self.selection_only = False

  Standard single-value Phrasewheel.

  ### Ancestors

  - cPhraseWheel
  - cPhraseWheelBase
  - wx._core.TextCtrl
  - wx._core.Control
  - wx._core.Window
  - wx._core.WindowBase
  - wx._core.EvtHandler
  - wx._core.Object
  - wx._core.Trackable
  - wx._core.TextEntry
  - sip.wrapper
  - sip.simplewrapper

  ### Inherited members

  - `cPhraseWheel`:
    - `Disable`
    - `Enable`
    - `GetData`
    - `SetData`
    - `SetText`
    - `add_callback_on_lose_focus`
    - `add_callback_on_modified`
    - `add_callback_on_selection`
    - `add_callback_on_set_focus`
    - `display_as_valid`