gnue-forms: combobox as master record selector?

Oleg Noga <[email protected]> Mon, 9 Jul 2007 21:29:39 +0300
Newsgroups gmane.comp.gnu.enterprise.general
Message-ID <[email protected]>
Hello!

I have a hierarchy in my database. 4 tables:

company
  department
    store
      store_document

Can i define form with comboboxes for selecting

company
  then department
    then store

and editing store_documents for specified store?

Please, see 3combos example.

Notes on implementation:

I have defined 4 datasources

ds_company is master
ds_department is detail of ds_company
ds_store is detail of ds_department

logically, ds_store_document must be detail of ds_store

but it is impossible because blocks not defined for company,
department, store.

I am using gnue-forms 0.6.0 with wxPython 2.8

Thanks
Oleg

_______________________________________________
Gnue mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnue
3combos.gfd (text/xml, 3 KB)
<?xml version="1.0"?>
<form title="3combos">

    <datasource 
        name="ds_company" connection="gnue" prequery="Y"
        table      = "company" 
        order_by   = "name" 
        
    />
    
    <datasource name="ds_department" connection="gnue" prequery="Y"
        table      = "department" 
        order_by   = "name" 
        master     = "ds_company"
        masterlink = "id"
        detaillink = "fk_company"
    />

    <datasource name="ds_store" connection="gnue" prequery="Y"
        table      = "store" 
        order_by   = "name" 
        master     = "ds_department"
        masterlink = "id"
        detaillink = "fk_department"
    />

    <datasource name="ds_store_document" connection="gnue" prequery="Y"
        table      = "store_document" 
        order_by   = "date,no"
    />
    <!--
        master     = "ds_store"
        masterlink = "id"
        detaillink = "fk_store"


        i can't link ds_store_document to ds_store because i have no corresponding blocks for 
        ds_company, ds_department, ds_store
    -->

    <logic>

        <block name='finder' rows="1">
            <field name="cb_company"    fk_description="name" fk_key="id" fk_source="ds_company">
                <trigger type="PRE-CHANGE">
                    # clear child comboboxes
                    finder.cb_department.clear()
                    finder.cb_store.clear()
                </trigger>
            </field>
            <field name="cb_department" fk_description="name" fk_key="id" fk_source="ds_department">
                <trigger type="PRE-CHANGE">
                    # clear child combobox
                    finder.cb_store.clear()
                </trigger>
            </field>
            <field name="cb_store"      fk_description="name" fk_key="id" fk_source="ds_store"/>
        </block>

        <block name="store_document" datasource="ds_store_document" rows="1">
            <field name="id"       field="id"/>
            <field name="no"       field="no"/>
            <field name="fk_store" field="fk_store" fk_description="name" fk_key="id" fk_source="ds_store"/>
            <field name="date"     field="date" datatype='date'  />
        </block>

    </logic>
    <layout xmlns:s="GNUe:Layout:Sizer">
        <page name="Page_1">
            <vbox>
                <entry name="cb_company"    field="cb_company"    label="Company"    block='finder'/>
                <entry name="cb_department" field="cb_department" label="Department" block='finder'/>
                <entry name="cb_store"      field="cb_store"      label="Store"      block='finder'/>

                <grid rows="5" block="store_document">
                    <gridline>
                        <entry name="no"               field="no"               label="Number"/>
                        <entry name="date"             field="date"             label="Date"/>
                        <entry name="fk_store"         field="fk_store"         label="Store"/>
                    </gridline>
                </grid>
            </vbox>
        </page>
    </layout>
</form>
3combos.gsd (application/octet-stream, 5.3 KB) - not displayed