[gnue-contrib] r275 - in address: forms schema

[email protected]
Newsgroups gmane.comp.cms.gnue.cvs
Message-ID <[email protected]>
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.