gnumed-devel
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]