Example #1
0
	def __populate_notebook(self):
		
		self.fld_request_id.Clear()
		self.lab_wheel.Clear()
		
		#------ due PNL ------------------------------------
		# FIXME: make limit configurable
		too_many, pending_requests = gmPathLab.get_pending_requests(limit=250)
		# clear list
		self.lbox_pending.DeleteAllItems()
		# FIXME: make use of too_many
		for request in pending_requests:
			item_idx = self.lbox_pending.InsertItem(info=wx.ListItem())
			# request date
			self.lbox_pending.SetStringItem(index = item_idx, col=0, label=request['sampled_when'].date)
			# request lab
			lab = self.__get_labname(request['pk_test_org'])
			self.lbox_pending.SetStringItem(index = item_idx, col=1, label=lab[0][0])
			# request id
			self.lbox_pending.SetStringItem(index = item_idx, col=2, label=request['request_id'])
			# patient
			pat = request.get_patient()
			self.lbox_pending.SetStringItem(index = item_idx, col=3, label="%s %s (%s)" % (pat[2], pat[3], pat[4].date))
			self.lbox_pending.SetStringItem(index = item_idx, col=4, label=_('pending'))
			# FIXME: make use of rest data in patient via mouse over context
			
		#----- import errors PNL -----------------------
		lab_errors = self.__get_import_errors()
		# clear list
		self.lbox_errors.DeleteAllItems()
		# populate list
		for lab_error in lab_errors:
			item_idx = self.lbox_errors.InsertItem(info=wx.ListItem())
			# when was error reported
			self.lbox_errors.SetStringItem(index = item_idx, col=0, label=lab_error[1].date)
			# error
			self.lbox_errors.SetStringItem(index = item_idx, col=1, label=lab_error[4])
			# solution
			self.lbox_errors.SetStringItem(index = item_idx, col=2, label=lab_error[5])
			# context
			self.lbox_errors.SetStringItem(index = item_idx, col=3, label=lab_error[6])
		
		#------ unreviewed lab results PNL ------------------------------------
		# FIXME: make configurable, make use of count visible lines func of wxlistctrl
		more_avail, self.dict_unreviewed_results = gmPathLab.get_unreviewed_results(limit=50)

		# FIXME: react to errors

		# clear grid
		self.__grid_unreviewed_results.ClearGrid()
		# set number of rows
		if self.__grid_unreviewed_results.GetNumberRows() == 0:
			self.__grid_unreviewed_results.AppendRows(len(self.dict_unreviewed_results))
		# populate grid
		for item_idx in range(len(self.dict_unreviewed_results)):
			result = self.dict_unreviewed_results[item_idx]

			# boolean renderer for first and second column
			renderer = apply(wx.GridCellBoolRenderer, ())
			self.__grid_unreviewed_results.SetCellRenderer(item_idx, 0 , renderer)
			self.__grid_unreviewed_results.SetCellRenderer(item_idx, 1 , renderer)
			# set all cells read only
			self.__grid_unreviewed_results.SetReadOnly(item_idx, 0, 1)
			self.__grid_unreviewed_results.SetReadOnly(item_idx, 1, 1)
			#self.__grid_unreviewed_results.SetReadOnly(item_idx, 2, True)
			self.__grid_unreviewed_results.EnableGridLines(0)
			# "reviewed" checkbox in first column
			try:
				self.__grid_unreviewed_results.SetColSize(0, self.__grid_unreviewed_results.GetColMinimalAcceptableWidth())
			except AttributeError:
				pass
			self.__grid_unreviewed_results.SetCellValue(item_idx, 0, '0')
			# "relevant" checkbox in second column
			try:
				self.__grid_unreviewed_results.SetColSize(1, self.__grid_unreviewed_results.GetColMinimalAcceptableWidth())
			except AttributeError:
				pass
			self.__grid_unreviewed_results.SetCellValue(item_idx, 1, '0')
			# abnormal ? -> display in red
			if (result['abnormal'] is not None) and (result['abnormal'].strip() != ''):
				self.__grid_unreviewed_results.SetCellTextColour(item_idx,2,wx.RED)
				self.__grid_unreviewed_results.SetCellTextColour(item_idx,3,wx.RED)
				self.__grid_unreviewed_results.SetCellTextColour(item_idx,4,wx.RED)
				self.__grid_unreviewed_results.SetCellTextColour(item_idx,5,wx.RED)
				self.__grid_unreviewed_results.SetCellTextColour(item_idx,6,wx.RED)
				self.__grid_unreviewed_results.SetCellTextColour(item_idx,7,wx.RED)
				# abnormal status from lab
				info = '(%s)' % result['abnormal']
				# technically abnormal -> defaults to relevant = true
				self.__grid_unreviewed_results.SetCellValue(item_idx, 1, '1')
			else:
				info = ''
				# technically normal -> defaults to relevant = False
				self.__grid_unreviewed_results.SetCellValue(item_idx, 1, '0')
			# patient
			pat = result.get_patient()
			self.__grid_unreviewed_results.SetCellValue(item_idx, 2, "%s %s (%s)" % (pat[2], pat[3], pat[4].date))
			self.__grid_unreviewed_results.SetColSize(2,200)
			# rxd when
			self.__grid_unreviewed_results.SetCellValue(item_idx, 3, result['lab_rxd_when'].date)
			self.__grid_unreviewed_results.SetColSize(3,80)
			# test name
			self.__grid_unreviewed_results.SetCellValue(item_idx, 4, result['unified_name'])
			self.__grid_unreviewed_results.SetColSize(4,100)
			# result including unit
			# FIXME: what about val_unit empty ?
			self.__grid_unreviewed_results.SetCellValue(item_idx, 5, '%s %s' % (result['unified_val'], info))
			self.__grid_unreviewed_results.SetColSize(5,80)
			# normal range
			if result['val_normal_range'] is None:
				self.__grid_unreviewed_results.SetCellValue(item_idx, 6, '')
			else:
				self.__grid_unreviewed_results.SetCellValue(item_idx, 6, '%s %s' % (result['val_normal_range'], result['val_unit']))
			self.__grid_unreviewed_results.SetColSize(6,80)
			# FIXME: target range
			# notes from provider
			if result['note_provider'] is None:
				self.__grid_unreviewed_results.SetCellValue(item_idx, 7, '')
			else:
				self.__grid_unreviewed_results.SetCellValue(item_idx, 7, result['note_provider'])

		# we show 50 items at once , notify user if there are more
		if more_avail:
			gmDispatcher.send(signal = 'statustext', msg =_('More unreviewed results available. Review some to see more.'))
Example #2
0
    def __populate_notebook(self):

        self.fld_request_id.Clear()
        self.lab_wheel.Clear()

        #------ due PNL ------------------------------------
        # FIXME: make limit configurable
        too_many, pending_requests = gmPathLab.get_pending_requests(limit=250)
        # clear list
        self.lbox_pending.DeleteAllItems()
        # FIXME: make use of too_many
        for request in pending_requests:
            item_idx = self.lbox_pending.InsertItem(info=wx.ListItem())
            # request date
            self.lbox_pending.SetItem(index=item_idx,
                                      column=0,
                                      label=request['sampled_when'].date)
            # request lab
            lab = self.__get_labname(request['pk_test_org'])
            self.lbox_pending.SetItem(index=item_idx,
                                      column=1,
                                      label=lab[0][0])
            # request id
            self.lbox_pending.SetItem(index=item_idx,
                                      column=2,
                                      label=request['request_id'])
            # patient
            pat = request.get_patient()
            self.lbox_pending.SetItem(index=item_idx,
                                      column=3,
                                      label="%s %s (%s)" %
                                      (pat[2], pat[3], pat[4].date))
            self.lbox_pending.SetItem(index=item_idx,
                                      column=4,
                                      label=_('pending'))
            # FIXME: make use of rest data in patient via mouse over context

        #----- import errors PNL -----------------------
        lab_errors = self.__get_import_errors()
        # clear list
        self.lbox_errors.DeleteAllItems()
        # populate list
        for lab_error in lab_errors:
            item_idx = self.lbox_errors.InsertItem(info=wx.ListItem())
            # when was error reported
            self.lbox_errors.SetItem(index=item_idx,
                                     column=0,
                                     label=lab_error[1].date)
            # error
            self.lbox_errors.SetItem(index=item_idx,
                                     column=1,
                                     label=lab_error[4])
            # solution
            self.lbox_errors.SetItem(index=item_idx,
                                     column=2,
                                     label=lab_error[5])
            # context
            self.lbox_errors.SetItem(index=item_idx,
                                     column=3,
                                     label=lab_error[6])

        #------ unreviewed lab results PNL ------------------------------------
        # FIXME: make configurable, make use of count visible lines func of wxlistctrl
        more_avail, self.dict_unreviewed_results = gmPathLab.get_unreviewed_results(
            limit=50)

        # FIXME: react to errors

        # clear grid
        self.__grid_unreviewed_results.ClearGrid()
        # set number of rows
        if self.__grid_unreviewed_results.GetNumberRows() == 0:
            self.__grid_unreviewed_results.AppendRows(
                len(self.dict_unreviewed_results))
        # populate grid
        for item_idx in range(len(self.dict_unreviewed_results)):
            result = self.dict_unreviewed_results[item_idx]

            # boolean renderer for first and second column
            renderer = apply(wx.GridCellBoolRenderer, ())
            self.__grid_unreviewed_results.SetCellRenderer(
                item_idx, 0, renderer)
            self.__grid_unreviewed_results.SetCellRenderer(
                item_idx, 1, renderer)
            # set all cells read only
            self.__grid_unreviewed_results.SetReadOnly(item_idx, 0, 1)
            self.__grid_unreviewed_results.SetReadOnly(item_idx, 1, 1)
            #self.__grid_unreviewed_results.SetReadOnly(item_idx, 2, True)
            self.__grid_unreviewed_results.EnableGridLines(0)
            # "reviewed" checkbox in first column
            try:
                self.__grid_unreviewed_results.SetColSize(
                    0,
                    self.__grid_unreviewed_results.
                    GetColMinimalAcceptableWidth())
            except AttributeError:
                pass
            self.__grid_unreviewed_results.SetCellValue(item_idx, 0, '0')
            # "relevant" checkbox in second column
            try:
                self.__grid_unreviewed_results.SetColSize(
                    1,
                    self.__grid_unreviewed_results.
                    GetColMinimalAcceptableWidth())
            except AttributeError:
                pass
            self.__grid_unreviewed_results.SetCellValue(item_idx, 1, '0')
            # abnormal ? -> display in red
            if (result['abnormal']
                    is not None) and (result['abnormal'].strip() != ''):
                self.__grid_unreviewed_results.SetCellTextColour(
                    item_idx, 2, wx.RED)
                self.__grid_unreviewed_results.SetCellTextColour(
                    item_idx, 3, wx.RED)
                self.__grid_unreviewed_results.SetCellTextColour(
                    item_idx, 4, wx.RED)
                self.__grid_unreviewed_results.SetCellTextColour(
                    item_idx, 5, wx.RED)
                self.__grid_unreviewed_results.SetCellTextColour(
                    item_idx, 6, wx.RED)
                self.__grid_unreviewed_results.SetCellTextColour(
                    item_idx, 7, wx.RED)
                # abnormal status from lab
                info = '(%s)' % result['abnormal']
                # technically abnormal -> defaults to relevant = true
                self.__grid_unreviewed_results.SetCellValue(item_idx, 1, '1')
            else:
                info = ''
                # technically normal -> defaults to relevant = False
                self.__grid_unreviewed_results.SetCellValue(item_idx, 1, '0')
            # patient
            pat = result.get_patient()
            self.__grid_unreviewed_results.SetCellValue(
                item_idx, 2, "%s %s (%s)" % (pat[2], pat[3], pat[4].date))
            self.__grid_unreviewed_results.SetColSize(2, 200)
            # rxd when
            self.__grid_unreviewed_results.SetCellValue(
                item_idx, 3, result['lab_rxd_when'].date)
            self.__grid_unreviewed_results.SetColSize(3, 80)
            # test name
            self.__grid_unreviewed_results.SetCellValue(
                item_idx, 4, result['unified_name'])
            self.__grid_unreviewed_results.SetColSize(4, 100)
            # result including unit
            # FIXME: what about val_unit empty ?
            self.__grid_unreviewed_results.SetCellValue(
                item_idx, 5, '%s %s' % (result['unified_val'], info))
            self.__grid_unreviewed_results.SetColSize(5, 80)
            # normal range
            if result['val_normal_range'] is None:
                self.__grid_unreviewed_results.SetCellValue(item_idx, 6, '')
            else:
                self.__grid_unreviewed_results.SetCellValue(
                    item_idx, 6,
                    '%s %s' % (result['val_normal_range'], result['val_unit']))
            self.__grid_unreviewed_results.SetColSize(6, 80)
            # FIXME: target range
            # notes from provider
            if result['note_provider'] is None:
                self.__grid_unreviewed_results.SetCellValue(item_idx, 7, '')
            else:
                self.__grid_unreviewed_results.SetCellValue(
                    item_idx, 7, result['note_provider'])

        # we show 50 items at once , notify user if there are more
        if more_avail:
            gmDispatcher.send(
                signal='statustext',
                msg=
                _('More unreviewed results available. Review some to see more.'
                  ))