[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Gnumed-devel] GNUmed plugin development - part 13
From: |
Sebastian Hilbert |
Subject: |
[Gnumed-devel] GNUmed plugin development - part 13 |
Date: |
Fri, 17 Jul 2009 23:22:43 +0200 |
User-agent: |
KMail/1.12.0 (Linux/2.6.27.23-0.1-default; KDE/4.2.95; i686; ; ) |
Be aware that some things have changed. The file
GNUmedDeviceParserElementTree.py has been moved from test-area/shilbert/ to
business/gmDevices.py
There are now four files involved in this plugin.
- gmDevices.py in /business - responsible for the XML data extraction part
- gmDeviceWidgets.py in /wxpython - responsible for calling gmDevices.py and
compiling the ui widgets
- gmCardiacDevicePluginPnl.py in /wxGladeWidgets - is the python code
representation of the ui widgets
- gmCardiacDevicePluginPnl.wxg in /wxg - is the xml representation of the ui
widgets
If I need to change the plugin's appearance I need to touch first
gmCardiacDevicePluginPnl.wxg with wxGlade and transfer it into the python code
representation gmCardiacDevicePluginPnl.py. This files gets imported and the
controls filled with data in gmDeviceWidgets.py. The business logic of data
compilation from and to screen is handled in gmDevices.py
Next up is getting the device data from the database instead of an XML file.
For the time being it was agreed that the xml file is simply stored as yet
another document. To store it GNUmed was started and the plugin 'Document
import' was used. I was asked for an associated episode. 'Routine postop
cardiac device checkup' was entered. 'Device check up' was chosen as document
type. This was entered via the menu item 'GNUmed>Manage master data>document
types'.
A quick chat with Karsten revealed the basic code:
pat = gmPerson.gmCurrentPatient()
doc_folder = pat.get_document_folder()
docs = doc_folder.get_documents()
This returns a list of cMedDoc objects which can be parsed like that:
for doc in docs:
doc['comment'] = ... etc.
doc_folder.get_documents() returns elements ordered by clin_when so the first
element is the newest one I am looking for.
for doc in docs:
if doc['type'] == 'cardiac device checkup report':
selected_docs.append(doc)
if not len(selected_docs) == 0:
# since get_documents() is sorted I simply get the first one
as the most recent one
# for now assume that the xml file provide the cardiac device
context.
# that pretty much means logical connection of leads and
generator is provided in the xml
xml = selected_docs[0].get_parts()[0].export_to_file()
tree = etree.parse(xml)
DevicesDisplayed = gmDevices.device_status_as_text(tree)
for line in DevicesDisplayed:
text = text + line
else:
_log.info('There are no device checkup reports in the
database')
text = _('There are no device checkup reports in the
database')
To construct the line
xml = selected_docs[0].get_parts()[0].export_to_file()
one has to take a good look at the file gmMedDoc.py in /business. Using that
code it is now possible to get the XML from the database and display the
current device status.
Currently the XML is entered via the default the 'attach document' plugin.
There is a nifty solution to a problem. How to check for documents of a type
that might not yet exist in the database ?
When the cardiac device plugin is initiated the document type is automatically
added to the document types in the database. The file gmDeviceWidgets holds
the following code for that.
def __init__(self, *args, **kwargs):
# check if report types exist in db, if not create them
dtype = gmMedDoc.create_document_type('cardiac device checkup
report')
dtype.set_translation(_('cardiac device checkup report'))
The next step is to get rid of saving to a file and reading from that. Another
issue is to get refresh going when entering new data.
- [Gnumed-devel] GNUmed plugin development - part 13,
Sebastian Hilbert <=