Author: reinhard
Date: 2007-05-15 13:51:16 -0500 (Tue, 15 May 2007)
New Revision: 275
Modified:
address/forms/address.gfd
address/schema/schema.gsd
Log:
Added search by phone number, immediately close window on return key if only
one record is in the search result.
Modified: address/forms/address.gfd
===================================================================
--- address/forms/address.gfd 2007-05-01 10:30:34 UTC (rev 274)
+++ address/forms/address.gfd 2007-05-15 18:51:16 UTC (rev 275)
@@ -54,7 +54,15 @@
<field name="eZIP" field="zip" datatype="text" length="12"/>
<field name="eVAT" field="vatid" datatype="text" length="16"/>
<field name="eCRG" field="compreg" datatype="text" length="32"/>
- <field name="ePhone" field="phone" datatype="text" length="64"/>
+ <field name="ePhone" field="phone" datatype="text" length="64">
+ <trigger type="POST-CHANGE">
+ if blk_company.ePhone.value is not None:
+ blk_company.ePhonex.value = ''.join([c for c in blk_company.ePhone.value if c in '0123456789'])
+ else:
+ blk_company.ePhonex.value = None
+ </trigger>
+ </field>
+ <field name="ePhonex" field="phonex" datatype="text" length="32"/>
<field name="eFax" field="fax" datatype="text" length="32"/>
<field name="eWeb" field="web" datatype="text" length="64"/>
<field name="eMail" field="email" datatype="text" length="64"/>
@@ -80,8 +88,24 @@
<field name="eSurname" field="surname" datatype="text" length="32"/>
<field name="eDepartment" field="department" datatype="text" length="32"/>
<field name="eDuty" field="duty" datatype="text" length="40"/>
- <field name="ePhone1" field="phone1" datatype="text" length="40"/>
- <field name="ePhone2" field="phone2" datatype="text" length="40"/>
+ <field name="ePhone1" field="phone1" datatype="text" length="40">
+ <trigger type="POST-CHANGE">
+ if blk_contact.ePhone1.value is not None:
+ blk_contact.ePhone1x.value = ''.join([c for c in blk_contact.ePhone1.value if c in '0123456789'])
+ else:
+ blk_contact.ePhone1x.value = None
+ </trigger>
+ </field>
+ <field name="ePhone2" field="phone2" datatype="text" length="40">
+ <trigger type="POST-CHANGE">
+ if blk_contact.ePhone2.value is not None:
+ blk_contact.ePhone2x.value = ''.join([c for c in blk_contact.ePhone2.value if c in '0123456789'])
+ else:
+ blk_contact.ePhone2x.value = None
+ </trigger>
+ </field>
+ <field name="ePhone1x" field="phone1x" datatype="text" length="32"/>
+ <field name="ePhone2x" field="phone2x" datatype="text" length="32"/>
<field name="eFax" field="fax" datatype="text" length="40"/>
<field name="eMail" field="email" datatype="text" length="64"/>
<field name="eMemo" field="memo" datatype="text"/>
@@ -172,10 +196,12 @@
</vbox>
</hbox>
</vbox>
- <!-- separate hbox so the outer hbox doesn't leave space for label -->
- <hbox>
- <entry block="blk" field="company" label="Schnellaufruf:" style="listbox"/>
- </hbox>
+ <vbox>
+ <hbox>
+ <entry block="blk" field="company" label="Schnellaufruf:" style="listbox"/>
+ </hbox>
+ <button action="act_search_phone" label="Telefonnummernsuche"/>
+ </vbox>
</hbox>
</page>
</layout>
@@ -197,6 +223,14 @@
blk_contact.search_record(id=params['prm_contact'])
</action>
+ <action name="act_search_phone">
+ params = {}
+ activateDialog('dlg_search_phone', params, True)
+ if params.has_key('prm_company') and params['prm_company'] is not None:
+ blk_company.search_record(id=params['prm_company'])
+ blk_contact.search_record(id=params['prm_contact'])
+ </action>
+
<action name="act_memo_company">
params = {'prm_memo': blk_company.eMemo.value}
activateDialog('dlg_memo', params, True)
@@ -293,7 +327,7 @@
</field>
</block>
- <block name="blk_company" datasource="dts_company" startup="empty">
+ <block name="blk_company" datasource="dts_company" startup="empty" editable="N" deletable="N">
<field name="id" field="id" datatype="number" length="8"/>
<field name="matchcode" field="matchcode" datatype="text" length="20"/>
<field name="name1" field="name1" datatype="text" length="64"/>
@@ -312,12 +346,14 @@
<grid block="blk_company" rows="20">
<gridline>
- <button label="Auswählen" action="act_select"/>
- <entry field="matchcode" label="Match"/>
- <entry field="name1" label="Firma-1"/>
- <entry field="name2" label="Firma-2"/>
- <entry field="street" label="Straße"/>
- <entry field="city" label="Ort"/>
+ <button label="Auswählen" action="act_select">
+ <trigger type="POST-FOCUSIN">act_button_focus.run()</trigger>
+ </button>
+ <entry field="matchcode" label="Match" navigable="N"/>
+ <entry field="name1" label="Firma-1" navigable="N"/>
+ <entry field="name2" label="Firma-2" navigable="N"/>
+ <entry field="street" label="Straße" navigable="N"/>
+ <entry field="city" label="Ort" navigable="N"/>
</gridline>
</grid>
</vbox>
@@ -328,6 +364,7 @@
<action name="act_initialize">
blk.search.value = None
+ blk_company.clear()
setFocus(blk.search)
</action>
@@ -371,8 +408,18 @@
blk_company.clear()
</action>
+ <action name="act_button_focus">
+ # FIXME: get_record_count not available before gnue-forms 0.6-pre1
+ # if blk_company.get_record_count() == 1 and blk_company.get_record_status() == 'clean':
+ if blk_company.getResultSet().getRecordCount() == 1 and blk_company.get_record_status() == 'clean':
+ act_select.run()
+ </action>
+
<action name="act_select">
prm_result.value = blk_company.id.value
+ # Workaround for a bug in wx: setting the focus in ON-ACTIVATION does not
+ # work for modal dialogs. So we reset the focus here before closing.
+ setFocus(blk.search)
form.close()
</action>
</dialog>
@@ -404,7 +451,7 @@
</field>
</block>
- <block name="blk_contact" datasource="dts_contact" startup="empty">
+ <block name="blk_contact" datasource="dts_contact" startup="empty" editable="N" deletable="N">
<field name="id" field="contact.id" datatype="number" length="8"/>
<field name="company" field="company" datatype="number" length="8"/>
<field name="surname" field="surname" datatype="text" length="32"/>
@@ -424,12 +471,14 @@
<grid block="blk_contact" rows="20">
<gridline>
- <button label="Auswählen" action="act_select"/>
- <entry field="surname" label="Nachname"/>
- <entry field="firstname" label="Vorname"/>
- <entry field="name1" label="Firma-1"/>
- <entry field="name2" label="Firma-2"/>
- <entry field="city" label="Ort"/>
+ <button label="Auswählen" action="act_select">
+ <trigger type="POST-FOCUSIN">act_button_focus.run()</trigger>
+ </button>
+ <entry field="surname" label="Nachname" navigable="N"/>
+ <entry field="firstname" label="Vorname" navigable="N"/>
+ <entry field="name1" label="Firma-1" navigable="N"/>
+ <entry field="name2" label="Firma-2" navigable="N"/>
+ <entry field="city" label="Ort" navigable="N"/>
</gridline>
</grid>
</vbox>
@@ -440,6 +489,7 @@
<action name="act_initialize">
blk.search.value = None
+ blk_contact.clear()
setFocus(blk.search)
</action>
@@ -480,10 +530,121 @@
blk_contact.clear()
</action>
+ <action name="act_button_focus">
+ # FIXME: get_record_count not available before gnue-forms 0.6-pre1
+ # if blk_contact.get_record_count() == 1 and blk_contact.get_record_status() == 'clean':
+ if blk_contact.getResultSet().getRecordCount() == 1 and blk_company.get_record_status() == 'clean':
+ act_select.run()
+ </action>
+
<action name="act_select">
prm_company.value = blk_contact.company.value
prm_contact.value = blk_contact.id.value
+ # Workaround for a bug in wx: setting the focus in ON-ACTIVATION does not
+ # work for modal dialogs. So we reset the focus here before closing.
+ setFocus(blk.search)
form.close()
</action>
</dialog>
+
+ <!-- ==================================================================== -->
+ <!-- Search by phone number -->
+ <!-- ==================================================================== -->
+
+ <dialog name="dlg_search_phone" title="Suche nach Telefonnummer">
+ <parameter name="prm_company" datatype="number" length="8" scale="0"/>
+ <parameter name="prm_contact" datatype="number" length="8" scale="0"/>
+
+ <trigger type="ON-ACTIVATION">act_initialize.run()</trigger>
+
+ <datasource name="dts_contact" connection="address"
+ table="contact left outer join company on contact.company = company.id"
+ primarykey="contact.id">
+ <sortorder>
+ <sortfield name="surname" descending="N" ignorecase="Y"/>
+ </sortorder>
+ </datasource>
+
+ <!-- ================================================================== -->
+
+ <logic>
+ <block name="blk">
+ <field name="search" datatype="text" length="64" case="upper">
+ <trigger type="POST-CHANGE">act_filter.run()</trigger>
+ </field>
+ </block>
+
+ <block name="blk_contact" datasource="dts_contact" startup="empty" editable="N" deletable="N">
+ <field name="id" field="contact.id" datatype="number" length="8"/>
+ <field name="company" field="company" datatype="number" length="8"/>
+ <field name="surname" field="surname" datatype="text" length="16"/>
+ <field name="firstname" field="firstname" datatype="text" length="16"/>
+ <field name="phone1" field="phone1" datatype="text" length="16"/>
+ <field name="phone2" field="phone2" datatype="text" length="16"/>
+ <field name="name1" field="name1" datatype="text" length="32"/>
+ <field name="phone" field="phone" datatype="text" length="16"/>
+ </block>
+ </logic>
+
+ <!-- ================================================================== -->
+
+ <layout>
+ <page name="pg">
+ <vbox>
+ <entry block="blk" field="search" label="Suchbegriff:"/>
+
+ <grid block="blk_contact" rows="20">
+ <gridline>
+ <button label="Auswählen" action="act_select">
+ <trigger type="POST-FOCUSIN">act_button_focus.run()</trigger>
+ </button>
+ <entry field="surname" label="Nachname" navigable="N"/>
+ <entry field="firstname" label="Vorname" navigable="N"/>
+ <entry field="phone1" label="Telefon 1" navigable="N"/>
+ <entry field="phone2" label="Telefon 2" navigable="N"/>
+ <entry field="name1" label="Firma-1" navigable="N"/>
+ <entry field="phone" label="Telefon" navigable="N"/>
+ </gridline>
+ </grid>
+ </vbox>
+ </page>
+ </layout>
+
+ <!-- ================================================================== -->
+
+ <action name="act_initialize">
+ blk.search.value = None
+ blk_contact.clear()
+ setFocus(blk.search)
+ </action>
+
+ <action name="act_filter">
+ val = blk.search.value
+
+ if val is not None:
+ item = "%" + val + "%"
+ blk_contact.query(['or',
+ ['like', ['field', 'phone1x'], ['const', item]],
+ ['like', ['field', 'phone2x'], ['const', item]],
+ ['like', ['field', 'phonex'], ['const', item]]])
+ else:
+ blk_contact.clear()
+ </action>
+
+ <action name="act_button_focus">
+ # FIXME: get_record_count not available before gnue-forms 0.6-pre1
+ # if blk_contact.get_record_count() == 1 and blk_contact.get_record_status() == 'clean':
+ if blk_contact.getResultSet().getRecordCount() == 1 and blk_contact.get_record_status() == 'clean':
+ act_select.run()
+ </action>
+
+ <action name="act_select">
+ prm_company.value = blk_contact.company.value
+ prm_contact.value = blk_contact.id.value
+ # Workaround for a bug in wx: setting the focus in ON-ACTIVATION does not
+ # work for modal dialogs. So we reset the focus here before closing.
+ setFocus(blk.search)
+ form.close()
+ </action>
+ </dialog>
</form>
Modified: address/schema/schema.gsd
===================================================================
--- address/schema/schema.gsd 2007-05-01 10:30:34 UTC (rev 274)
+++ address/schema/schema.gsd 2007-05-15 18:51:16 UTC (rev 275)
@@ -15,6 +15,7 @@
<field name="vatid" type="string" length="16"/>
<field name="compreg" type="string" length="32"/>
<field name="phone" type="string" length="64"/>
+ <field name="phonex" type="string" length="32"/>
<field name="fax" type="string" length="32"/>
<field name="web" type="string" length="64"/>
<field name="email" type="string" length="64"/>
@@ -50,6 +51,8 @@
<field name="duty" type="string" length="40"/>
<field name="phone1" type="string" length="40"/>
<field name="phone2" type="string" length="40"/>
+ <field name="phone1x" type="string" length="32"/>
+ <field name="phone2x" type="string" length="32"/>
<field name="fax" type="string" length="40"/>
<field name="email" type="string" length="64"/>
<field name="memo" type="string"/>
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.