commit-gnue
[Top][All Lists]
Advanced

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

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


From: johannes
Subject: [gnue-contrib] r285 - in address: forms schema
Date: Tue, 29 Jul 2008 03:44:28 -0500 (CDT)

Author: johannes
Date: 2008-07-29 03:44:27 -0500 (Tue, 29 Jul 2008)
New Revision: 285

Modified:
   address/forms/address.gfd
   address/schema/schema.gsd
Log:
Neue Flags aufgenommen
Datenexport nur noch f?\195?\188r aktuellen Filter


Modified: address/forms/address.gfd
===================================================================
--- address/forms/address.gfd   2007-11-08 08:09:34 UTC (rev 284)
+++ address/forms/address.gfd   2008-07-29 08:44:27 UTC (rev 285)
@@ -1,782 +1,868 @@
 <?xml version="1.0" encoding="UTF-8"?>
 
 <form title="Studiokonzept Adressdatenbank">
-  <options>
-    <author>BYTEWISE Software GmbH</author>
-    <version>$Rev$</version>
-    <description>Adressenverwaltung</description>
-  </options>
+ <options>
+   <author>BYTEWISE Software GmbH</author>
+   <version>$Rev$</version>
+   <description>Adressenverwaltung</description>
+ </options>
 
-  <datasource name="dts_company" connection="address" table="company">
-    <sortorder>
-      <sortfield name="name1" descending="N" ignorecase="Y"/>
-    </sortorder>
-  </datasource>
+ <datasource name="dts_company" connection="address" table="company">
+   <sortorder>
+     <sortfield name="name1" descending="N" ignorecase="Y"/>
+   </sortorder>
+ </datasource>
 
-  <datasource name="dts_contact" connection="address" table="contact" 
master="dts_company" masterlink="id" detaillink="company">
-    <sortorder>
-      <sortfield name="surname" descending="N" ignorecase="Y"/>
-    </sortorder>
-  </datasource>
+ <datasource name="dts_contact" connection="address" table="contact" 
master="dts_company" masterlink="id" detaillink="company">
+   <sortorder>
+     <sortfield name="surname" descending="N" ignorecase="Y"/>
+   </sortorder>
+ </datasource>
 
-  <datasource name="dts_category" connection="address" table="category" 
prequery="Y">
-    <sortorder>
-      <sortfield name="text" descending="N" ignorecase="Y"/>
-    </sortorder>
-  </datasource>
+ <datasource name="dts_category" connection="address" table="category" 
prequery="Y">
+   <sortorder>
+     <sortfield name="text" descending="N" ignorecase="Y"/>
+   </sortorder>
+ </datasource>
 
-  <datasource name="dts_salutation" connection="address" table="salutation" 
prequery="Y">
-    <sortorder>
-      <sortfield name="text" descending="N" ignorecase="Y"/>
-    </sortorder>
-  </datasource>
+ <datasource name="dts_salutation" connection="address" table="salutation" 
prequery="Y">
+   <sortorder>
+     <sortfield name="text" descending="N" ignorecase="Y"/>
+   </sortorder>
+ </datasource>
 
-  <datasource name="dts_company_quick" connection="address" table="company" 
prequery="Y">
-    <sortorder>
-      <sortfield name="matchcode" descending="N" ignorecase="Y"/>
-    </sortorder>
-    <condition>
-      <eq><cfield name="quicksearch"/><cconst value="1"/></eq>
-    </condition>
-  </datasource>
+ <datasource name="dts_company_quick" connection="address" table="company" 
prequery="Y">
+   <sortorder>
+     <sortfield name="matchcode" descending="N" ignorecase="Y"/>
+   </sortorder>
+   <condition>
+     <eq><cfield name="quicksearch"/><cconst value="1"/></eq>
+   </condition>
+ </datasource>
 
-  <datasource name="dts_csv" connection="address" table="contact left outer 
join company on contact.company = company.id" primarykey="contact.id">
-    <sortorder>
-      <sortfield name="company.name1" ignorecase="Y"/>
-      <sortfield name="contact.surname" ignorecase="Y"/>
-    </sortorder>
-  </datasource>
+ <datasource name="dts_csv" connection="address" table="contact left outer 
join company on contact.company = company.id" primarykey="contact.id">
+   <sortorder>
+     <sortfield name="company.name1" ignorecase="Y"/>
+     <sortfield name="contact.surname" ignorecase="Y"/>
+   </sortorder>
+ </datasource>
 
-  <!-- ==================================================================== -->
+ <!-- ==================================================================== -->
 
-  <logic>
-    <block name="blk_company" datasource="dts_company" startup="full">
-      <field name="id"           field="id"         datatype="number" 
length="8"/>
-      <field name="eMatchcode"   field="matchcode"  datatype="text"   
length="25" 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="32"/>
-      <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">
-        <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"/>
-      <field name="eCustomer"    field="customer"    datatype="text"    
length="25"/>
-      <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="32" fk_key="id" fk_description="text" fk_source="dts_category"/>
-      <field name="eMemoAvailable"                   datatype="boolean" 
editable="N"/>
-      <field name="eMemo"        field="memo"        datatype="text"/>
-      <field name="eQuicksearch" field="quicksearch" datatype="boolean"/>
-      <field name="eFilter1"     field="filter1"     datatype="boolean"/>
-      <field name="eFilter2"     field="filter2"     datatype="boolean"/>
-      <field name="eFilter3"     field="filter3"     datatype="boolean"/>
-      <field name="contact_count"                    datatype="number"  
length="4"  editable="N"/>
+ <logic>
+   <block name="blk_company" datasource="dts_company" startup="full">
+     <field name="id"           field="id"         datatype="number" 
length="8"/>
+     <field name="eMatchcode"   field="matchcode"  datatype="text"   
length="25" 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="32"/>
+     <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">
+       <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"/>
+     <field name="eCustomer"    field="customer"    datatype="text"    
length="25"/>
+     <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="32" fk_key="id" fk_description="text" fk_source="dts_category"/>
+     <field name="eMemoAvailable"                   datatype="boolean" 
editable="N"/>
+     <field name="eMemo"        field="memo"        datatype="text"/>
+     <field name="eQuicksearch" field="quicksearch" datatype="boolean"/>
+     <field name="eFilter1"     field="filter1"     datatype="boolean"/>
+     <field name="eFilter2"     field="filter2"     datatype="boolean"/>
+     <field name="eFilter3"     field="filter3"     datatype="boolean"/>
+     <field name="contact_count"                    datatype="number"  
length="4"  editable="N"/>
 
-      <trigger type="ON-RECORDLOADED">
-        blk_company.eMemoAvailable.value = (blk_company.eMemo.value is not 
None and len(blk_company.eMemo.value.strip()) > 0)
-      </trigger>
+     <trigger type="ON-RECORDLOADED">
+       blk_company.eMemoAvailable.value = (blk_company.eMemo.value is not None 
and len(blk_company.eMemo.value.strip()) > 0)
+     </trigger>
 
-      <trigger type="POST-FOCUSIN">
-        blk_company.contact_count.value = blk_contact.get_record_count()
-      </trigger>
+     <trigger type="POST-FOCUSIN">
+       blk_company.contact_count.value = blk_contact.get_record_count()
+     </trigger>
 
-      <trigger type="PRE-DELETE">
-        # TODO: This should be solved using the already existing blocks
-        backend = globals().get('address')
-        if backend is not None:
-            cid = blk_company.id.value
-            cmd = 'DELETE FROM contact WHERE company=%d' % cid
-            backend.sql(cmd);
-      </trigger>
-    </block>
+     <trigger type="PRE-DELETE">
+       # TODO: This should be solved using the already existing blocks
+       backend = globals().get('address')
+       if backend is not None:
+           cid = blk_company.id.value
+           cmd = 'DELETE FROM contact WHERE company=%d' % cid
+           backend.sql(cmd);
+     </trigger>
+   </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="16" 
fk_key="id" fk_description="text" fk_source="dts_salutation"/>
-      <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="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"/>
-      <field name="eMemoAvailable"                 datatype="boolean" 
editable="N"/>
-      <field name="eFilter1"    field="filter1"    datatype="boolean"/>
-      <field name="eFilter2"    field="filter2"    datatype="boolean"/>
-      <field name="eFilter3"    field="filter3"    datatype="boolean"/>
+   <block name="blk_contact" datasource="dts_contact">
+     <field name="id"          field="id"         datatype="number" 
length="8"/>
+     <field name="eSalutation" field="salutation" datatype="text" length="16" 
fk_key="id" fk_description="text" fk_source="dts_salutation"/>
+     <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="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"/>
+     <field name="eMemoAvailable"                 datatype="boolean" 
editable="N"/>
+     <field name="eFilter1"    field="filter1"    datatype="boolean"/>
+     <field name="eFilter2"    field="filter2"    datatype="boolean"/>
+     <field name="eFilter3"    field="filter3"    datatype="boolean"/>
 
-      <trigger type="ON-RECORDLOADED">
-        blk_contact.eMemoAvailable.value = (blk_contact.eMemo.value is not 
None and len(blk_contact.eMemo.value.strip()) > 0)
-      </trigger>
+     <field name="eCorp_film"  field="corp_film"  datatype="boolean" />
+     <field name="eEvent"      field="event"      datatype="boolean" />
+     <field name="eWerbung"    field="werbung"    datatype="boolean" />
+     <field name="ePproduct"   field="pproduct"   datatype="boolean" />
+     <field name="eAdaptionen" field="adaptionen" datatype="boolean" />
+     <field name="eVermietung" field="vermietung" datatype="boolean" />
+     <field name="eTV"         field="tv"         datatype="boolean" />
+     <field name="eReserve"    field="reserve"    datatype="boolean" />
 
-      <trigger type="POST-FOCUSIN">
-        blk_company.contact_count.value = blk_contact.get_record_count()
-      </trigger>
-    </block>
+     <trigger type="ON-RECORDLOADED">
+       blk_contact.eMemoAvailable.value = (blk_contact.eMemo.value is not None 
and len(blk_contact.eMemo.value.strip()) > 0)
+     </trigger>
 
-    <block name="blk">
-      <field name="company" datatype="text" length="16" required="Y"
-        fk_key="id" fk_description="matchcode" 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.contact_count.value = blk_contact.get_record_count()
-        </trigger>
-        <trigger type="POST-FOCUSOUT">
-          # Reset value so the cursor disappears.
-          blk.company.value = None
-        </trigger>
-      </field>
-    </block>
+     <trigger type="POST-FOCUSIN">
+       blk_company.contact_count.value = blk_contact.get_record_count()
+     </trigger>
+   </block>
 
-    <block name="blk_csv" datasource="dts_csv">
-      <field name="FA/Firma1" field="company.name1"/>
-      <field name="FA/Firma2" field="company.name2"/>
-      <field name="FA/Straße" field="company.street"/>
-      <field name="FA/PLZ" field="company.zip"/>
-      <field name="FA/Ort" field="company.city"/>
-      <field name="FA/Telefon" field="company.phone"/>
-      <field name="FA/Kategorie" field="company.category"/>
-      <field name="FA/Filter1" field="company.filter1"/>
-      <field name="FA/Filter2" field="company.filter2"/>
-      <field name="FA/Filter3" field="company.filter3"/>
-      <field name="ASP/Anrede" field="contact.salutation" fk_key="id" 
fk_description="text" fk_source="dts_salutation"/>
-      <field name="ASP/Titel" field="contact.title"/>
-      <field name="ASP/Vorname" field="contact.firstname"/>
-      <field name="ASP/Nachname" field="contact.surname"/>
-      <field name="ASP/Abteilung" field="contact.department"/>
-      <field name="ASP/Funktion" field="contact.duty"/>
-      <field name="ASP/Telefon" field="contact.phone1"/>
-      <field name="ASP/Mobil" field="contact.phone2"/>
-      <field name="ASP/Filter1" field="contact.filter1"/>
-      <field name="ASP/Filter2" field="contact.filter2"/>
-      <field name="ASP/Filter3" field="contact.filter3"/>
-    </block>
-  </logic>
+   <block name="blk">
+     <field name="company" datatype="text" length="16" required="Y"
+       fk_key="id" fk_description="matchcode" 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.contact_count.value = blk_contact.get_record_count()
+       </trigger>
+       <trigger type="POST-FOCUSOUT">
+         # Reset value so the cursor disappears.
+         blk.company.value = None
+       </trigger>
+     </field>
+   </block>
 
-  <!-- ==================================================================== -->
+   <block name="blk_csv" datasource="dts_csv">
+     <field name="FID" field="company.id" />
+     <field name="FA/Firma1" field="company.name1"/>
+     <field name="FA/Firma2" field="company.name2"/>
+     <field name="FA/Straße" field="company.street"/>
+     <field name="FA/PLZ" field="company.zip"/>
+     <field name="FA/Ort" field="company.city"/>
+     <field name="FA/Telefon" field="company.phone"/>
+     <field name="FA/Kategorie" field="company.category"/>
+     <field name="FA/Filter1" field="company.filter1"/>
+     <field name="FA/Filter2" field="company.filter2"/>
+     <field name="FA/Filter3" field="company.filter3"/>
+     <field name="ASP/Anrede" field="contact.salutation" fk_key="id" 
fk_description="text" fk_source="dts_salutation"/>
+     <field name="ASP/Titel" field="contact.title"/>
+     <field name="ASP/Vorname" field="contact.firstname"/>
+     <field name="ASP/Nachname" field="contact.surname"/>
+     <field name="ASP/Abteilung" field="contact.department"/>
+     <field name="ASP/Funktion" field="contact.duty"/>
+     <field name="ASP/Telefon" field="contact.phone1"/>
+     <field name="ASP/Mobil" field="contact.phone2"/>
+     <field name="ASP/EMail" field="contact.email"/>
+     <field name="ASP/Filter1" field="contact.filter1"/>
+     <field name="ASP/Filter2" field="contact.filter2"/>
+     <field name="ASP/Filter3" field="contact.filter3"/>
+   </block>
+ </logic>
 
-  <layout tabbed="none">
-    <page name="pg">
-      <hbox>
-        <vbox>
-          <hbox block="blk_company" label="Firmen">
-            <vbox>
-              <hbox label="Match:">
-                <entry field="eMatchcode"/>
-                <button action="act_search_company" label="Suche"/>
-              </hbox>
-              <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="Ort:"/>
-              <entry field="eCountry"       label="Land:"/>
-              <entry field="eVAT"           label="UID:"/>
-              <entry field="eCRG"           label="FNr:"/>
-              <entry field="eQuicksearch" label="Schnellaufruf"/>
-              <hbox label="Memo:">
-                <entry field="eMemoAvailable"     label="verfügbar"/>
-                <button action="act_memo_company" label="Bearbeiten"/>
-              </hbox>
-            </vbox>
+ <!-- ==================================================================== -->
 
-            <vbox>
-              <entry field="ePhone"       label="Tel.allg.:"/>
-              <entry field="eFax"         label="Fax allg.:"/>
-              <entry field="eWeb"         label="Internet:"/>
-              <entry field="eMail"        label="E-Mail:"/>
-              <entry field="eCustomer"    label="unsere KdNr:"/>
-              <entry field="eBWCustomer"  label="BW KdNr:"/>
-              <entry field="eBWSupplier"  label="BW LiNr:"/>
-              <entry field="eShipment"    label="Versandart:"/>
-              <entry field="eCategory"    label="Kategorie:"/>
-              <entry field="eFilter1"     label="Filter-1"/>
-              <entry field="eFilter2"     label="Filter-2"/>
-              <entry field="eFilter3"     label="Filter-3"/>
-            </vbox>
-          </hbox>
+ <layout tabbed="none">
+   <page name="pg">
+     <hbox>
+       <vbox>
+         <hbox block="blk_company" label="Firmen">
+           <vbox>
+             <hbox label="Match:">
+               <entry field="eMatchcode"/>
+               <button action="act_search_company" label="Suche"/>
+             </hbox>
+             <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="Ort:"/>
+             <entry field="eCountry"       label="Land:"/>
+             <entry field="eVAT"           label="UID:"/>
+             <entry field="eCRG"           label="FNr:"/>
+             <button action="to_clipboard" label="In Zwischenablage kopieren"/>
+             <entry field="eQuicksearch" label="Schnellaufruf"/>
+             <hbox label="Memo:">
+               <entry field="eMemoAvailable"     label="verfügbar"/>
+               <button action="act_memo_company" label="Bearbeiten"/>
+             </hbox>
+           </vbox>
 
-          <vbox block="blk_contact" label="Ansprechpersonen">
-            <hbox>
-              <vbox>
-                <hbox label="Anrede:">
-                  <entry field="eSalutation"/>
-                  <button action="act_search_contact" label="Suche"/>
-                </hbox>
-                <entry field="eTitle"      label="Titel:"/>
-                <entry field="eFirstname"  label="Vorname:"/>
-                <entry field="eSurname"    label="Nachname:"/>
-                <entry field="eDepartment" label="Abteilung:"/>
-                <entry field="eDuty"       label="Funktion:"/>
-                <hbox label="Memo:">
-                  <entry field="eMemoAvailable" label="verfügbar"/>
-                  <button action="act_memo_contact" label="Bearbeiten"/>
-                </hbox>
-              </vbox>
+           <vbox>
+             <entry field="ePhone"       label="Tel.allg.:"/>
+             <entry field="eFax"         label="Fax allg.:"/>
+             <entry field="eWeb"         label="Internet:"/>
+             <entry field="eMail"        label="E-Mail:"/>
+             <entry field="eCustomer"    label="unsere KdNr:"/>
+             <entry field="eBWCustomer"  label="BW KdNr:"/>
+             <entry field="eBWSupplier"  label="BW LiNr:"/>
+             <entry field="eShipment"    label="Versandart:"/>
+             <entry field="eCategory"    label="Kategorie:"/>
+             <entry field="eFilter1"     label="SKMT Kunde"/>
+             <entry field="eFilter2"     label="DMG Kunde"/>
+             <entry field="eFilter3"     label="DMG Interessent"/>
+           </vbox>
+         </hbox>
 
-              <vbox>
-                <entry field="ePhone1"        label="Telefon:"/>
-                <entry field="ePhone2"        label="Mobil:"/>
-                <entry field="eFax"           label="Fax:"/>
-                <entry field="eMail"          label="E-Mail:"/>
-                <entry field="eFilter1"       label="Filter-1"/>
-                <entry field="eFilter2"       label="Filter-2"/>
-                <entry field="eFilter3"       label="Filter-3"/>
-              </vbox>
-            </hbox>
-            <hbox>
-              <button label="&lt;&lt;">
-                <trigger type="ON-ACTION">blk_contact.first_record()</trigger>
-              </button>
-              <button label="&lt;">
-                <trigger type="ON-ACTION">blk_contact.prev_record()</trigger>
-              </button>
-              <button label="&gt;">
-                <trigger type="ON-ACTION">blk_contact.next_record()</trigger>
-              </button>
-              <button label="&gt;&gt;">
-                <trigger type="ON-ACTION">blk_contact.last_record()</trigger>
-              </button>
-              <entry block="blk_company" field="contact_count"/>
-            </hbox>
-          </vbox>
-        </vbox>
-        <vbox>
-          <hbox>
-            <entry block="blk" field="company" label="Schnellaufruf:" 
style="listbox"/>
-          </hbox>
-          <button action="act_search_phone" label="Telefonnummernsuche"/>
-          <button action="act_export" label="Datenexport"/>
-        </vbox>
-      </hbox>
-    </page>
-  </layout>
+         <vbox block="blk_contact" label="Ansprechpersonen">
+           <hbox>
+             <vbox>
+               <hbox label="Anrede:">
+                 <entry field="eSalutation"/>
+                 <button action="act_search_contact" label="Suche"/>
+               </hbox>
+               <entry field="eTitle"      label="Titel:"/>
+               <entry field="eFirstname"  label="Vorname:"/>
+               <entry field="eSurname"    label="Nachname:"/>
+               <entry field="eDepartment" label="Abteilung:"/>
+               <entry field="eDuty"       label="Funktion:"/>
+               <hbox label="Memo:">
+                 <entry field="eMemoAvailable" label="verfügbar"/>
+                 <button action="act_memo_contact" label="Bearbeiten"/>
+               </hbox>
+             </vbox>
 
-  <!-- ==================================================================== -->
+             <vbox>
+               <entry field="ePhone1"        label="Telefon:"/>
+               <entry field="ePhone2"        label="Mobil:"/>
+               <entry field="eFax"           label="Fax:"/>
+               <entry field="eMail"          label="E-Mail:"/>
+               <hbox>
+                 <vbox label="SKMT">
+                   <entry field="eFilter1"       label="SKMT-Temp"/>
+                   <entry field="eFilter2"       label="SKMT-Mailing"/>
+                   <entry field="eFilter3"       label="SKMT-dScope"/>
+                 </vbox>
+                 <hbox label="DMG">
+                 <vbox>
+                   <entry field="eCorp_film"     label="Corporate Film"/>
+                   <entry field="eEvent"         label="Event"/>
+                   <entry field="eWerbung"       label="Werbung"/>
+                   <entry field="ePproduct"      label="Post Production"/>
+                 </vbox>
+                 <vbox>
+                   <entry field="eAdaptionen"    label="Adaption"/>
+                   <entry field="eVermietung"    label="Vermietung"/>
+                   <entry field="eTV"            label="TV"/>
+                   <entry field="eReserve"       label="Reserve"/>
+                 </vbox>
+                 </hbox>
+               </hbox>
+             </vbox>
+           </hbox>
+           <hbox>
+             <button label="&lt;&lt;">
+               <trigger type="ON-ACTION">blk_contact.first_record()</trigger>
+             </button>
+             <button label="&lt;">
+               <trigger type="ON-ACTION">blk_contact.prev_record()</trigger>
+             </button>
+             <button label="&gt;">
+               <trigger type="ON-ACTION">blk_contact.next_record()</trigger>
+             </button>
+             <button label="&gt;&gt;">
+               <trigger type="ON-ACTION">blk_contact.last_record()</trigger>
+             </button>
+             <entry block="blk_company" field="contact_count"/>
+           </hbox>
+         </vbox>
+       </vbox>
+       <vbox>
+         <hbox>
+           <entry block="blk" field="company" label="Schnellaufruf:" 
style="listbox"/>
+         </hbox>
+         <button action="act_search_phone" label="Telefonnummernsuche"/>
+         <button action="act_export" label="Datenexport"/>
+       </vbox>
+     </hbox>
+   </page>
+ </layout>
 
-  <action name="act_search_company">
-    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'])
-  </action>
+ <!-- ==================================================================== -->
 
-  <action name="act_search_contact">
-    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'])
-  </action>
+ <action name="act_search_company">
+   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'])
+ </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'])
-    blk_company.contact_count.value = blk_contact.get_record_count()
-  </action>
+ <action name="act_search_contact">
+   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'])
+ </action>
 
-  <action name="act_memo_company">
-    params = {'prm_memo': blk_company.eMemo.value}
-    activateDialog('dlg_memo', params, True)
-    if params.get('prm_mres'):
-        value = params['prm_memo']
-        blk_company.eMemo.value = value
-        blk_company.eMemoAvailable.value = bool(value)
-  </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'])
+   blk_company.contact_count.value = blk_contact.get_record_count()
+ </action>
 
-  <action name="act_memo_contact">
-    params = {'prm_memo': blk_contact.eMemo.value}
-    activateDialog('dlg_memo', params, True)
-    if params.get('prm_mres'):
-        value = params['prm_memo']
-        blk_contact.eMemo.value = value
-        blk_contact.eMemoAvailable.value = bool(value)
-  </action>
+ <action name="act_memo_company">
+   params = {'prm_memo': blk_company.eMemo.value}
+   activateDialog('dlg_memo', params, True)
+   if params.get('prm_mres'):
+       value = params['prm_memo']
+       blk_company.eMemo.value = value
+       blk_company.eMemoAvailable.value = bool(value)
+ </action>
 
-  <action name="act_export">
-    import wx
-    fname = wx.FileSelector("Daten exportieren", default_extension="txt",
-            wildcard="*.txt", flags=wx.SAVE | wx.OVERWRITE_PROMPT)
-    if not fname:
-        return
-    form.status_message("Daten werden exportiert...")
-    blk_csv.set_filter()
-    from gnue.common.utils import ucsv
-    fieldnames = [
-            u"FA/Firma1",
-            u"FA/Firma2",
-            u"FA/Straße",
-            u"FA/PLZ",
-            u"FA/Ort",
-            u"FA/Telefon",
-            u"FA/Kategorie",
-            u"FA/Filter1",
-            u"FA/Filter2",
-            u"FA/Filter3",
-            u"ASP/Anrede",
-            u"ASP/Titel",
-            u"ASP/Vorname",
-            u"ASP/Nachname",
-            u"ASP/Abteilung",
-            u"ASP/Funktion",
-            u"ASP/Telefon",
-            u"ASP/Mobil",
-            u"ASP/Filter1",
-            u"ASP/Filter2",
-            u"ASP/Filter3"]
-    ucsv.write_file(fieldnames, blk_csv.get_data(fieldnames), fname,
-            dialect="excel-tab", encoding="cp1250")
-    form.status_message("")
-    form.show_message("Datenexport beendet")
-  </action>
+ <action name="act_memo_contact">
+   params = {'prm_memo': blk_contact.eMemo.value}
+   activateDialog('dlg_memo', params, True)
+   if params.get('prm_mres'):
+       value = params['prm_memo']
+       blk_contact.eMemo.value = value
+       blk_contact.eMemoAvailable.value = bool(value)
+ </action>
 
-  <!-- ==================================================================== -->
-  <!-- Edit memo                                                            -->
-  <!-- ==================================================================== -->
+ <action name="act_export">
+   import wx
+   fname = wx.FileSelector("Daten exportieren", default_extension="txt",
+           wildcard="*.txt", flags=wx.SAVE | wx.OVERWRITE_PROMPT)
+   if not fname:
+       return
+   form.status_message("Daten werden exportiert...")
+   blk_csv.set_filter()
+   from gnue.common.utils import ucsv
+   fieldnames = [
+           u"FID",
+           u"FA/Firma1",
+           u"FA/Firma2",
+           u"FA/Straße",
+           u"FA/PLZ",
+           u"FA/Ort",
+           u"FA/Telefon",
+           u"FA/Kategorie",
+           u"FA/Filter1",
+           u"FA/Filter2",
+           u"FA/Filter3",
+           u"ASP/Anrede",
+           u"ASP/Titel",
+           u"ASP/Vorname",
+           u"ASP/Nachname",
+           u"ASP/Abteilung",
+           u"ASP/Funktion",
+           u"ASP/Telefon",
+           u"ASP/Mobil",
+           u"ASP/EMail",
+           u"ASP/Filter1",
+           u"ASP/Filter2",
+           u"ASP/Filter3"]
 
-  <dialog name="dlg_memo" title="Memo bearbeiten">
-    <parameter name="prm_memo" datatype="text"/>
-    <parameter name="prm_mres" datatype="boolean"/>
+   master = blk_company.get_data(['id'])
+   detail = blk_csv.get_data(fieldnames)
 
-    <trigger type="On-Activation">act_init.run()</trigger>
+   neu = []
+   for row in master:
+       mid = int(row['id'])
 
-    <!-- ================================================================== -->
+       # haben wir ein Detail
+       for drow in detail:
+           if int(drow['FID']) == mid:
+               neu.append(drow)
 
-    <logic>
-      <block name="blk">
-        <field name="memo" datatype="text"/>
-      </block>
-    </logic>
+   ucsv.write_file(fieldnames, neu, fname,
+           dialect="excel-tab", encoding="cp1250")
+   form.status_message("")
+   form.show_message("Datenexport beendet")
+ </action>
 
-    <!-- ================================================================== -->
+ <!-- ==================================================================== -->
 
-    <layout xmlns:s="GNUe:Layout:Sizer">
-      <page name="Page">
-        <vbox block="blk">
-          <hbox>
-            <entry field="memo" label="Memo:" style="multiline" 
s:def_width="60" s:def_height="20" s:max_height="100"/>
-          </hbox>
+ <action name="to_clipboard">
+   import wx
+   import os
+   clp = wx.TheClipboard
 
-          <hbox>
-            <button label="Ok" action="act_ok"/>
-            <button label="Abbrechen" action="act_cancel"/>
-          </hbox>
-        </vbox>
-      </page>
-    </layout>
+   if clp.Open():
+     try:
+       zeilen = []
+       clp.Clear()
 
-    <!-- ================================================================== -->
+       if blk_company.eName1.value:
+         zeilen.append(blk_company.eName1.value)
 
-    <action name="act_init">
-      blk.memo.value = prm_memo.value
-      setFocus(blk.memo)
-    </action>
+       if blk_company.eName2.value:
+         zeilen.append(blk_company.eName2.value)
 
-    <action name="act_ok">
-      prm_memo.value = blk.memo.value
-      prm_mres.value = True
-      form.close()
-    </action>
+       if blk_company.eStreet.value:
+         zeilen.append(blk_company.eStreet.value)
 
-    <action name="act_cancel">
-      prm_mres.value = False
-      form.close()
-    </action>
-  </dialog>
+       teil = []
+       if blk_company.eZIP.value:
+         teil.append(blk_company.eZIP.value)
 
-  <!-- ==================================================================== -->
-  <!-- Search by company                                                    -->
-  <!-- ==================================================================== -->
+       if blk_company.eCity.value:
+         teil.append(blk_company.eCity.value)
 
-  <dialog name="dlg_search_company" title="Suche nach Firma">
-    <parameter name="prm_result" datatype="number" length="8" scale="0"/>
-    <parameter name="prm_search" datatype="text" length="100" />
+       if teil:
+         zeilen.append(' '.join(teil))
 
-    <trigger type="ON-ACTIVATION">act_initialize.run()</trigger>
+       txt = wx.TextDataObject()
+       txt.SetText(os.linesep.join(zeilen))
+       clp.AddData(txt)
 
-    <datasource name="dts_company" connection="address" table="company">
-      <sortorder>
-        <sortfield name="name1" descending="N" ignorecase="Y"/>
-      </sortorder>
-    </datasource>
+       clp.Flush()
 
-    <!-- ================================================================== -->
+     finally:
+       clp.Close()
+ </action>
 
-    <logic>
-      <block name="blk">
-        <field name="search" datatype="text" length="64" case="upper"/>
-      </block>
+ <!-- ==================================================================== -->
+ <!-- Edit memo                                                            -->
+ <!-- ==================================================================== -->
 
-      <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"/>
-        <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>
+ <dialog name="dlg_memo" title="Memo bearbeiten">
+   <parameter name="prm_memo" datatype="text"/>
+   <parameter name="prm_mres" datatype="boolean"/>
 
-    <!-- ================================================================== -->
+   <trigger type="On-Activation">act_init.run()</trigger>
 
-    <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">
-                <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>
-      </page>
-    </layout>
+   <logic>
+     <block name="blk">
+       <field name="memo" datatype="text"/>
+     </block>
+   </logic>
 
-    <!-- ================================================================== -->
+   <!-- ================================================================== -->
 
-    <action name="act_initialize">
-      blk.search.value = None
-      blk_company.clear()
-      setFocus(blk.search)
-      setParameter('prm_search', '')
-    </action>
+   <layout xmlns:s="GNUe:Layout:Sizer">
+     <page name="Page">
+       <vbox block="blk">
+         <hbox>
+           <entry field="memo" label="Memo:" style="multiline" 
s:def_width="60" s:def_height="20" s:max_height="100"/>
+         </hbox>
 
-    <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'ü'}
+         <hbox>
+           <button label="Ok" action="act_ok"/>
+           <button label="Abbrechen" action="act_cancel"/>
+         </hbox>
+       </vbox>
+     </page>
+   </layout>
 
-        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:]
+   <action name="act_init">
+     blk.memo.value = prm_memo.value
+     setFocus(blk.memo)
+   </action>
 
-            xres = build(newval, ix + 1)
-            result.extend(xres)
+   <action name="act_ok">
+     prm_memo.value = blk.memo.value
+     prm_mres.value = True
+     form.close()
+   </action>
 
-        result.append(aval)
-        return result
+   <action name="act_cancel">
+     prm_mres.value = False
+     form.close()
+   </action>
+ </dialog>
 
-      def build_pattern(pattern):
-        result = []
+ <!-- ==================================================================== -->
+ <!-- Search by company                                                    -->
+ <!-- ==================================================================== -->
 
-        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]]])
+ <dialog name="dlg_search_company" title="Suche nach Firma">
+   <parameter name="prm_result" datatype="number" length="8" scale="0"/>
+   <parameter name="prm_search" datatype="text" length="100" />
 
-        result.insert(0, 'or')
-        return result
+   <trigger type="ON-ACTIVATION">act_initialize.run()</trigger>
 
-      val = blk.search.value
-      old = getParameter('prm_search')
+   <datasource name="dts_company" connection="address" table="company">
+     <sortorder>
+       <sortfield name="name1" descending="N" ignorecase="Y"/>
+     </sortorder>
+   </datasource>
 
-      if old != val:
-          if val is not None:
-              blk_company.query(build_pattern("%%" + val + "%%"))
-          else:
-              blk_company.clear()
+   <!-- ================================================================== -->
 
-          setParameter('prm_search', val)
-    </action>
+   <logic>
+     <block name="blk">
+       <field name="search" datatype="text" length="64" case="upper"/>
+     </block>
 
-    <action name="act_button_focus">
-      act_filter.run()
-      # 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>
+     <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"/>
+       <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>
 
-    <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>
+   <!-- ================================================================== -->
 
-  <!-- ==================================================================== -->
-  <!-- Search by contact                                                    -->
-  <!-- ==================================================================== -->
+   <layout>
+     <page name="pg">
+       <vbox>
+         <entry block="blk" field="search" label="Suchbegriff:"/>
 
-  <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"/>
-    <parameter name="prm_search" datatype="text" length="120" />
+         <grid block="blk_company" rows="20">
+           <gridline>
+             <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>
+     </page>
+   </layout>
 
-    <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>
+   <action name="act_initialize">
+     blk.search.value = None
+     blk_company.clear()
+     setFocus(blk.search)
+     setParameter('prm_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'ü'}
 
-    <logic>
-      <block name="blk">
-        <field name="search" datatype="text" length="64" case="upper"/>
-      </block>
+       result = []
 
-      <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"/>
-        <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>
+       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)
 
-    <layout>
-      <page name="pg">
-        <vbox>
-          <entry block="blk" field="search" label="Suchbegriff:"/>
+       result.append(aval)
+       return result
 
-          <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="name1"     label="Firma-1"  navigable="N"/>
-              <entry  field="name2"     label="Firma-2"  navigable="N"/>
-              <entry  field="city"      label="Ort"      navigable="N"/>
-            </gridline>
-          </grid>
-        </vbox>
-      </page>
-    </layout>
+     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]]])
 
-    <action name="act_initialize">
-      blk.search.value = None
-      blk_contact.clear()
-      setFocus(blk.search)
-      setParameter('prm_search', None)
-    </action>
+       result.insert(0, 'or')
+       return result
 
-    <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'ü'}
+     val = blk.search.value
+     old = getParameter('prm_search')
 
-        result = []
+     if old != val:
+         if val is not None:
+             blk_company.query(build_pattern("%%" + val + "%%"))
+         else:
+             blk_company.clear()
 
-        for ix in range(last, len(aval)):
-          if aval[ix] in cmap:
-            cc = aval[ix]
-            newval = aval[0:ix] + cmap[cc] + aval[ix + 1:]
+         setParameter('prm_search', val)
+   </action>
 
-            xres = build(newval, ix + 1)
-            result.extend(xres)
+   <action name="act_button_focus">
+     act_filter.run()
+     # 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>
 
-        result.append(aval)
-        return result
+   <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>
 
-      def build_pattern(pattern):
-        result = []
+ <!-- ==================================================================== -->
+ <!-- Search by contact                                                    -->
+ <!-- ==================================================================== -->
 
-        for item in build(pattern):
-          result.extend ([['like', ['upper', ['field', 'surname']], ['const', 
item]],
-                          ['like', ['upper', ['field', 'firstname']], 
['const', item]]])
+ <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"/>
+   <parameter name="prm_search" datatype="text" length="120" />
 
-        result.insert(0, 'or')
-        return result
+   <trigger type="ON-ACTIVATION">act_initialize.run()</trigger>
 
-      val = blk.search.value
-      old = getParameter('prm_search')
-      if old != val:
-          if val is not None:
-              blk_contact.query(build_pattern("%%" + val + "%%"))
-          else:
-              blk_contact.clear()
+   <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>
 
-          setParameter('prm_search', val)
-    </action>
+   <!-- ================================================================== -->
 
-    <action name="act_button_focus">
-      act_filter.run()
-      # 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>
+   <logic>
+     <block name="blk">
+       <field name="search" datatype="text" length="64" case="upper"/>
+     </block>
 
-    <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>
+     <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"/>
+       <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>
 
-  <!-- ==================================================================== -->
-  <!-- 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"/>
-    <parameter name="prm_search" datatype="text" length="120" />
+   <layout>
+     <page name="pg">
+       <vbox>
+         <entry block="blk" field="search" label="Suchbegriff:"/>
 
-    <trigger type="ON-ACTIVATION">act_initialize.run()</trigger>
+         <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="name1"     label="Firma-1"  navigable="N"/>
+             <entry  field="name2"     label="Firma-2"  navigable="N"/>
+             <entry  field="city"      label="Ort"      navigable="N"/>
+           </gridline>
+         </grid>
+       </vbox>
+     </page>
+   </layout>
 
-    <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>
+   <!-- ================================================================== -->
 
-    <!-- ================================================================== -->
+   <action name="act_initialize">
+     blk.search.value = None
+     blk_contact.clear()
+     setFocus(blk.search)
+     setParameter('prm_search', None)
+   </action>
 
-    <logic>
-      <block name="blk">
-        <field name="search" datatype="text" length="64" case="upper"/>
-      </block>
+   <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'ü'}
 
-      <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>
+       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:]
 
-    <layout>
-      <page name="pg">
-        <vbox>
-          <entry block="blk" field="search" label="Suchbegriff:"/>
+           xres = build(newval, ix + 1)
+           result.extend(xres)
 
-          <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>
+       result.append(aval)
+       return result
 
-    <!-- ================================================================== -->
+     def build_pattern(pattern):
+       result = []
 
-    <action name="act_initialize">
-      blk.search.value = None
-      blk_contact.clear()
-      setFocus(blk.search)
-      setParameter('prm_search', None)
-    </action>
+       for item in build(pattern):
+         result.extend ([['like', ['upper', ['field', 'surname']], ['const', 
item]],
+                         ['like', ['upper', ['field', 'firstname']], ['const', 
item]]])
 
-    <action name="act_filter">
-      val = blk.search.value
-      old = getParameter('prm_search')
-      if old != val:
-          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()
+       result.insert(0, 'or')
+       return result
 
-          setParameter('prm_search', val)
-    </action>
+     val = blk.search.value
+     old = getParameter('prm_search')
+     if old != val:
+         if val is not None:
+             blk_contact.query(build_pattern("%%" + val + "%%"))
+         else:
+             blk_contact.clear()
 
-    <action name="act_button_focus">
-      act_filter.run()
-      # 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>
+         setParameter('prm_search', val)
+   </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>
+   <action name="act_button_focus">
+     act_filter.run()
+     # 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>
+
+ <!-- ==================================================================== -->
+ <!-- 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"/>
+   <parameter name="prm_search" datatype="text" length="120" />
+
+   <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"/>
+     </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)
+     setParameter('prm_search', None)
+   </action>
+
+   <action name="act_filter">
+     val = blk.search.value
+     old = getParameter('prm_search')
+     if old != val:
+         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()
+
+         setParameter('prm_search', val)
+   </action>
+
+   <action name="act_button_focus">
+     act_filter.run()
+     # 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-11-08 08:09:34 UTC (rev 284)
+++ address/schema/schema.gsd   2008-07-29 08:44:27 UTC (rev 285)
@@ -62,6 +62,14 @@
         <field name="filter1"    type="boolean"/>
         <field name="filter2"    type="boolean"/>
         <field name="filter3"    type="boolean"/>
+        <field name="corp_film"  type="boolean" />
+        <field name="event"      type="boolean" />
+        <field name="werbung"    type="boolean" />
+        <field name="pproduct"   type="boolean" />
+        <field name="adaptionen" type="boolean" />
+        <field name="vermietung" type="boolean" />
+        <field name="tv"         type="boolean" />
+        <field name="reserve"    type="boolean" />
       </fields>
 
       <primarykey name="pk_contact">





reply via email to

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