commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


From: reinhard
Subject: [gnue-contrib] r262 - in address: forms schema
Date: Sat, 31 Mar 2007 18:23:27 -0500 (CDT)

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" />





reply via email to

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