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

[email protected]
Newsgroups gmane.comp.cms.gnue.cvs
Message-ID <[email protected]>
Author: reinhard
Date: 2007-03-31 18:23:27 -0500 (Sat, 31 Mar 2007)
New Revision: 262

Modified:
   address/forms/address.gfd
   address/schema/schema.gsd
Log:
More work on address database.


Modified: address/forms/address.gfd
===================================================================
--- address/forms/address.gfd	2007-03-26 13:27:27 UTC (rev 261)
+++ address/forms/address.gfd	2007-03-31 23:23:27 UTC (rev 262)
@@ -20,28 +20,35 @@
   <datasource name="dts_salutation" connection="address" table="salutation"
     prequery="Y"/>
 
+  <datasource name="dts_company_quick" connection="address" table="company"
+    prequery="Y">
+    <sortorder>
+      <sortfield name="name1" descending="N" ignorecase="Y"/>
+    </sortorder>
+  </datasource>
+
   <logic>
     <block name="blk_company" datasource="dts_company" startup="full">
-      <field name="search"                         datatype="text" length="64" case="upper"/>
-      <field name="eMatchcode"  field="matchcode"  datatype="text" length="20" case="upper"/>
-      <field name="eName1"      field="name1"      datatype="text" length="64"/>
-      <field name="eName2"      field="name2"      datatype="text" length="64"/>
-      <field name="eCountry"    field="country"    datatype="text" length="4"/>
-      <field name="eStreet"     field="street"     datatype="text" length="64"/>
-      <field name="eCity"       field="city"       datatype="text" length="64"/>
-      <field name="eZIP"        field="zip"        datatype="text" length="10"/>
-      <field name="eVAT"        field="vatid"      datatype="text" length="18"/>
-      <field name="eCRG"        field="compreg"    datatype="text" length="32"/>
+      <field name="id"          field="id"         datatype="number" length="8"/>
+      <field name="eMatchcode"  field="matchcode"  datatype="text"   length="16" case="upper"/>
+      <field name="eName1"      field="name1"      datatype="text"   length="64"/>
+      <field name="eName2"      field="name2"      datatype="text"   length="64"/>
+      <field name="eCountry"    field="country"    datatype="text"   length="4"/>
+      <field name="eStreet"     field="street"     datatype="text"   length="64"/>
+      <field name="eCity"       field="city"       datatype="text"   length="64"/>
+      <field name="eZIP"        field="zip"        datatype="text"   length="8"/>
+      <field name="eVAT"        field="vatid"      datatype="text"   length="18"/>
+      <field name="eCRG"        field="compreg"    datatype="text"   length="32"/>
 
-      <field name="ePhone"      field="phone"      datatype="text" length="50"/>
-      <field name="eFax"        field="fax"        datatype="text" length="50"/>
-      <field name="eWeb"        field="web"        datatype="text" length="64"/>
-      <field name="eMail"       field="email"      datatype="text" length="64"/>
-      <field name="eCustomer"   field="customer"   datatype="text" length="20"/>
-      <field name="eBWCustomer" field="bwcustomer" datatype="text" length="16"/>
-      <field name="eBWSupplier" field="bwsupplier" datatype="text" length="16"/>
-      <field name="eShipment"   field="shipment"   datatype="text" length="64"/>
-      <field name="eCategory"   field="category"   datatype="text" length="64" fk_key="id" fk_description="text" fk_source="dts_category"/>
+      <field name="ePhone"      field="phone"      datatype="text"   length="64"/>
+      <field name="eFax"        field="fax"        datatype="text"   length="64"/>
+      <field name="eWeb"        field="web"        datatype="text"   length="64"/>
+      <field name="eMail"       field="email"      datatype="text"   length="64"/>
+      <field name="eCustomer"   field="customer"   datatype="text"   length="32"/>
+      <field name="eBWCustomer" field="bwcustomer" datatype="text"   length="16"/>
+      <field name="eBWSupplier" field="bwsupplier" datatype="text"   length="16"/>
+      <field name="eShipment"   field="shipment"   datatype="text"   length="64"/>
+      <field name="eCategory"   field="category"   datatype="text"   length="64" fk_key="id" fk_description="text" fk_source="dts_category"/>
       <field name="eMemo"       field="memo"       datatype="text"/>
       <field name="eMemoAvailable"                 datatype="boolean" editable="N"/>
 
@@ -52,10 +59,11 @@
     </block>
 
     <block name="blk_contact" datasource="dts_contact">
+      <field name="id"          field="id"         datatype="number" length="8"/>
       <field name="eSalutation" field="salutation" datatype="text" length="15" fk_key="id" fk_description="text" fk_source="dts_salutation"/>
-      <field name="eTitle"      field="title"      datatype="text" length="21"/>
-      <field name="eFirstname"  field="firstname"  datatype="text" length="26"/>
-      <field name="eSurname"    field="surname"    datatype="text" length="31"/>
+      <field name="eTitle"      field="title"      datatype="text" length="32"/>
+      <field name="eFirstname"  field="firstname"  datatype="text" length="32"/>
+      <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="32"/>
       <field name="ePhone1"     field="phone1"     datatype="text" length="32"/>
@@ -70,6 +78,16 @@
         ]]>
       </trigger>
     </block>
+
+    <block name="blk">
+      <field name="company" datatype="text" length="32" fk_key="id" fk_description="name1" fk_source="dts_company_quick">
+        <trigger type="POST-CHANGE">
+          if blk.company.value is not None:
+            blk_company.search_record(id=int(blk.company.get()))
+            blk.company.value = None
+        </trigger>
+      </field>
+    </block>
   </logic>
 
   <layout tabbed="none">
@@ -77,83 +95,40 @@
       <vbox>
         <hbox block="blk_company" label="Firmen">
           <vbox>
-            <hbox label="Suche:">
-              <entry field="search"/>
+            <button label="Suche">
+              <trigger type="ON-ACTION">
+                params = {}
+                activateDialog('dlg_search_company', params, True)
+                if params.has_key('prm_result') and params['prm_result'] is not None:
+                  blk_company.search_record(id=params['prm_result'])
+              </trigger>
+            </button>
 
-              <button label="Suche">
-                <trigger type="ON-ACTION"><![CDATA[
-                  def u (v):
-                    return unicode (v, 'utf-8')
-
-                  def build (aval, last = 0):
-                    cmap = {u('ö'): u('Ö'), u('Ö'): u('ö'),
-                            u('ä'): u('Ä'), u('Ä'): u('ä'),
-                            u('ü'): u('Ü'), u('Ü'): u('ü')}
-
-                    result = []
-
-                    for ix in range (last, len (aval)):
-                      if aval [ix] in cmap:
-                        cc = aval [ix]
-                        newval = aval [0:ix] + cmap [cc] + aval [ix + 1:]
-
-                        xres = build (newval, ix + 1)
-                        result.extend (xres)
-
-                    result.append (aval)
-                    return result
-
-                  def buildPattern (pattern):
-                    result = []
-
-                    for item in build (pattern):
-                      result.extend ([ \
-                        ['like', ['upper', ['field', 'matchcode']], ['const', item]], \
-                        ['like', ['upper', ['field', 'name1']], ['const', item]],     \
-                        ['like', ['upper', ['field', 'name2']], ['const', item]], \
-                        ['exist', 'contact', 'id', 'company', \
-                          ['or', 
-                            ['like', ['upper', ['field', 'firstname']],
-                            ['const', item]],
-                            ['like', ['upper', ['field', 'surname']],
-                            ['const', item]]]]])
-
-                    result.insert (0, 'or')
-                    return result
-
-                  val = blk_company.search.value
-                  pattern = "%%%s%%" % val
-
-                  cond = buildPattern(pattern)
-
-                  blk_company.query(cond)
-                  ]]>
-                </trigger>
-              </button>
-            </hbox>
-
             <entry field="eMatchcode"     label="Match:"/>
             <entry field="eName1"         label="Firma-1:"/>
             <entry field="eName2"         label="Firma-2:"/>
             <entry field="eStreet"        label="Straße:"/>
             <entry field="eZIP"           label="PLZ:"/>
-            <entry field="eCity"          label="Stadt:"/>
+            <entry field="eCity"          label="Ort:"/>
             <entry field="eCountry"       label="Land:"/>
             <entry field="eVAT"           label="UID:"/>
             <entry field="eCRG"           label="FNr:"/>
-            <entry field="eMemoAvailable" label="Memo verfügbar"/>
 
-            <button label="Memo">
-              <trigger type="ON-ACTION"><![CDATA[
-                params = {'prm_memo': blk_company.eMemo.value}
-                activateDialog('editMemo', params, True)
-                if params.get('prm_mres'):
-                  value = params['prm_memo']
-                  blk_company.eMemo.value = value
-                  blk_company.eMemoAvailable.value = bool(value)
-                ]]>
-              </trigger>
-            </button>
+            <hbox>
+              <entry field="eMemoAvailable" label="Memo verfügbar"/>
+
+              <button label="Memo">
+                <trigger type="ON-ACTION"><![CDATA[
+                  params = {'prm_memo': blk_company.eMemo.value}
+                  activateDialog('editMemo', params, True)
+                  if params.get('prm_mres'):
+                    value = params['prm_memo']
+                    blk_company.eMemo.value = value
+                    blk_company.eMemoAvailable.value = bool(value)
+                  ]]>
+                </trigger>
+              </button>
+            </hbox>
           </vbox>
 
           <vbox>
@@ -167,10 +142,23 @@
             <entry field="eShipment"    label="Versandart:"/>
             <entry field="eCategory"    label="Kategorie:"/>
           </vbox>
+
+          <entry block="blk" field="company" label="Schnellaufruf:"
+            style="dropdown"/>
         </hbox>
 
         <hbox block="blk_contact" label="Ansprechpersonen">
           <vbox>
+            <button label="Suche">
+              <trigger type="ON-ACTION">
+                params = {}
+                activateDialog('dlg_search_contact', 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'])
+              </trigger>
+            </button>
+
             <entry field="eSalutation" label="Anrede:"/>
             <entry field="eTitle"      label="Titel:"/>
             <entry field="eFirstname"  label="Vorname:"/>
@@ -184,47 +172,48 @@
             <entry field="ePhone2"        label="Telefon 2:"/>
             <entry field="eFax"           label="Fax:"/>
             <entry field="eMail"          label="E-Mail:"/>
-            <entry field="eMemoAvailable" label="Memo verfügbar"/>
 
-            <button label="Memo">
-              <trigger type="ON-ACTION"><![CDATA[
-                params = {'prm_memo': blk_contact.eMemo.value}
-                activateDialog('editMemo', params, True)
-                if params.get('prm_mres'):
-                  value = params['prm_memo']
-                  blk_contact.eMemo.value = value
-                  blk_contact.eMemoAvailable.value = bool(value)
-                ]]>
-              </trigger>
-            </button>
+            <hbox>
+              <entry field="eMemoAvailable" label="Memo verfügbar"/>
+
+              <button label="Memo">
+                <trigger type="ON-ACTION"><![CDATA[
+                  params = {'prm_memo': blk_contact.eMemo.value}
+                  activateDialog('editMemo', params, True)
+                  if params.get('prm_mres'):
+                    value = params['prm_memo']
+                    blk_contact.eMemo.value = value
+                    blk_contact.eMemoAvailable.value = bool(value)
+                  ]]>
+                </trigger>
+              </button>
+            </hbox>
           </vbox>
         </hbox>
       </vbox>
     </page>
   </layout>
 
+  <!-- ==================================================================== -->
+  <!-- Edit memo                                                            -->
+  <!-- ==================================================================== -->
+
   <dialog name="editMemo" title="Memo bearbeiten">
-
     <parameter name="prm_memo" datatype="text"/>
     <parameter name="prm_mres" datatype="boolean"/>
 
-    <trigger type="On-Startup">
-      form.setFeature ('GUI:MENUBAR:SUPPRESS', 1)
-      form.setFeature ('GUI:TOOLBAR:SUPPRESS', 1)
-      form.setFeature ('GUI:STATUSBAR:SUPPRESS', 1)
-    </trigger>
+    <trigger type="On-Activation">act_init.run()</trigger>
 
-    <trigger type="On-Activation">
-      blk.memo.value = prm_memo.value
-      setFocus(blk.memo)
-    </trigger>
+    <!-- ================================================================== -->
 
     <logic>
       <block name="blk">
-        <field name="memo"/>
+        <field name="memo" datatype="text"/>
       </block>
     </logic>
 
+    <!-- ================================================================== -->
+
     <layout>
       <page name="Page">
         <vbox block="blk">
@@ -233,25 +222,247 @@
           </hbox>
 
           <hbox>
-            <button label="Ok" >
-              <trigger type="ON-ACTION"><![CDATA[
-                prm_memo.value = blk.memo.value
-                prm_mres.value = True
-                close()
-                ]]>
-              </trigger>
-            </button>
-
-            <button label="Abbrechen" >
-              <trigger type="ON-ACTION"><![CDATA[
-                prm_mres.value = False
-                close ()
-                ]]>
-              </trigger>
-            </button>
+            <button label="Ok" action="act_ok"/>
+            <button label="Abbrechen" action="act_cancel"/>
           </hbox>
         </vbox>
       </page>
     </layout>
+
+    <!-- ================================================================== -->
+
+    <action name="act_init">
+      blk.memo.value = prm_memo.value
+      setFocus(blk.memo)
+    </action>
+
+    <action name="act_ok">
+      prm_memo.value = blk.memo.value
+      prm_mres.value = True
+      form.close()
+    </action>
+
+    <action name="act_cancel">
+      prm_mres.value = False
+      form.close()
+    </action>
   </dialog>
+
+  <!-- ==================================================================== -->
+  <!-- Search by company                                                    -->
+  <!-- ==================================================================== -->
+
+  <dialog name="dlg_search_company" title="Suche nach Firma">
+    <parameter name="prm_result" datatype="number" length="8" scale="0"/>
+
+    <trigger type="ON-ACTIVATION">act_initialize.run()</trigger>
+
+    <datasource name="dts_company" connection="address" table="company">
+      <sortorder>
+        <sortfield name="name1" 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_company" datasource="dts_company" startup="empty">
+        <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"/>
+        <field name="name2"     field="name2"      datatype="text"   length="64"/>
+        <field name="street"    field="street"     datatype="text"   length="64"/>
+        <field name="city"      field="city"       datatype="text"   length="64"/>
+      </block>
+    </logic>
+
+    <!-- ================================================================== -->
+
+    <layout>
+      <page name="pg">
+        <vbox>
+          <entry block="blk" field="search" label="Suchbegriff:"/>
+
+          <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"/>
+            </gridline>
+          </grid>
+        </vbox>
+      </page>
+    </layout>
+
+    <!-- ================================================================== -->
+
+    <action name="act_initialize">
+      blk.search.value = None
+      setFocus(blk.search)
+    </action>
+
+    <action name="act_filter">
+      # This is a workaround for SQLite3 not knowing that UPPER('ä') = 'Ä'.
+      def build(aval, last=0):
+        cmap = {u'ö': u'Ö', u'Ö': u'ö',
+                u'ä': u'Ä', u'Ä': u'ä',
+                u'ü': u'Ü', u'Ü': u'ü'}
+
+        result = []
+
+        for ix in range(last, len(aval)):
+          if aval[ix] in cmap:
+            cc = aval[ix]
+            newval = aval[0:ix] + cmap[cc] + aval[ix + 1:]
+
+            xres = build(newval, ix + 1)
+            result.extend(xres)
+
+        result.append(aval)
+        return result
+
+      def build_pattern(pattern):
+        result = []
+
+        for item in build(pattern):
+          result.extend ([ \
+            ['like', ['upper', ['field', 'matchcode']], ['const', item]], \
+            ['like', ['upper', ['field', 'name1']], ['const', item]], \
+            ['like', ['upper', ['field', 'name2']], ['const', item]]])
+
+        result.insert(0, 'or')
+        return result
+
+      val = blk.search.value
+
+      if val is not None:
+        blk_company.query(build_pattern("%%" + val + "%%"))
+      else:
+        blk_company.clear()
+    </action>
+
+    <action name="act_select">
+      prm_result.value = blk_company.id.value
+      form.close()
+    </action>
+  </dialog>
+
+  <!-- ==================================================================== -->
+  <!-- Search by contact                                                    -->
+  <!-- ==================================================================== -->
+
+  <dialog name="dlg_search_contact" title="Suche nach Ansprechperson">
+    <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">
+        <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"/>
+        <field name="firstname" field="firstname"  datatype="text"   length="32"/>
+        <field name="name1"     field="name1"      datatype="text"   length="64"/>
+        <field name="name2"     field="name2"      datatype="text"   length="64"/>
+        <field name="city"      field="city"       datatype="text"   length="64"/>
+      </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"/>
+              <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"/>
+            </gridline>
+          </grid>
+        </vbox>
+      </page>
+    </layout>
+
+    <!-- ================================================================== -->
+
+    <action name="act_initialize">
+      blk.search.value = None
+      setFocus(blk.search)
+    </action>
+
+    <action name="act_filter">
+      # This is a workaround for SQLite3 not knowing that UPPER('ä') = 'Ä'.
+      def build(aval, last=0):
+        cmap = {u'ö': u'Ö', u'Ö': u'ö',
+                u'ä': u'Ä', u'Ä': u'ä',
+                u'ü': u'Ü', u'Ü': u'ü'}
+
+        result = []
+
+        for ix in range(last, len(aval)):
+          if aval[ix] in cmap:
+            cc = aval[ix]
+            newval = aval[0:ix] + cmap[cc] + aval[ix + 1:]
+
+            xres = build(newval, ix + 1)
+            result.extend(xres)
+
+        result.append(aval)
+        return result
+
+      def build_pattern(pattern):
+        result = []
+
+        for item in build(pattern):
+          result.extend ([['like', ['upper', ['field', 'surname']], ['const', item]]])
+
+        result.insert(0, 'or')
+        return result
+
+      val = blk.search.value
+
+      if val is not None:
+        blk_contact.query(build_pattern("%%" + val + "%%"))
+      else:
+        blk_contact.clear()
+    </action>
+
+    <action name="act_select">
+      prm_company.value = blk_contact.company.value
+      prm_contact.value = blk_contact.id.value
+      form.close()
+    </action>
+  </dialog>
 </form>

Modified: address/schema/schema.gsd
===================================================================
--- address/schema/schema.gsd	2007-03-26 13:27:27 UTC (rev 261)
+++ address/schema/schema.gsd	2007-03-31 23:23:27 UTC (rev 262)
@@ -16,8 +16,8 @@
         <field name="city" type="string" length="64" />
         <field name="vatid" type="string" length="18"  />
         <field name="compreg" type="string" length="32" />
-        <field name="phone" type="string" length="50"  />
-        <field name="fax" type="string" length="50"  />
+        <field name="phone" type="string" length="64"  />
+        <field name="fax" type="string" length="64"  />
         <field name="web" type="string" length="64" />
         <field name="email" type="string" length="64" />
         <field name="customer" type="string" length="20" />
@@ -48,8 +48,8 @@
 
         <field name="salutation" type="number" length="8" />
         <field name="title" type="string" length="21" />
-        <field name="firstname" type="string" length="26" />
-        <field name="surname" type="string" length="31" />
+        <field name="firstname" type="string" length="32" />
+        <field name="surname" type="string" length="32" />
         <field name="department" type="string" length="32" />
         <field name="duty" type="string" length="32" />
         <field name="phone1" type="string" length="32" />
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.