Skip to content

/ Zope / gocept svn checkins / Archive / 2008 / 2008-11 / SVN: r7087 - gocept.collmex/trunk/src/gocept/collmex

[ << ] [ >> ]

[ SVN: r7084 - gtimelog-macosx/trunk / Michael ... ] [ SVN: r7099 - in gocept.infrastructure/testing: . ... ]

SVN: r7087 - gocept.collmex/trunk/src/gocept/collmex
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 09:41:03 [ FULL ]
Author: zagy
Date: Fri Nov 28 09:41:01 2008
New Revision: 7087

Log:
testing.py uses environment for credentials now



Modified:
   gocept.collmex/trunk/src/gocept/collmex/testing.py

Modified: gocept.collmex/trunk/src/gocept/collmex/testing.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/testing.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/testing.py	Fri Nov 28 09:41:01 2008
(at)(at) -2,6 +2,7 (at)(at)
 # Copyright (c) 2008 gocept gmbh & co. kg
 # See also LICENSE.txt
 
+import os
 import zope.testbrowser.browser
 
 
(at)(at) -11,11 +12,11 (at)(at)
     b.open('http://www.collmex.de')
 
     # Login
-    b.getControl('Kunden Nr').value = '42779'
+    b.getControl('Kunden Nr').value = os.environ['collmex_customer']
     b.getControl('anmelden...').click()
 
-    b.getControl('Benutzer').value = '1141688'
-    b.getControl('Kennwort').value = '1416678'
+    b.getControl('Benutzer').value = os.environ['collmex_username']
+    b.getControl('Kennwort').value = os.environ['collmex_password']
     b.getControl('Anmelden').click()
 
     # Firma loeschen

SVN: r7088 - gocept.collmex/trunk/src/gocept/collmex
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 09:53:33 [ FULL ]
Author: zagy
Date: Fri Nov 28 09:53:32 2008
New Revision: 7088

Log:
Explicitly close response to not leave open http objects.



Modified:
   gocept.collmex/trunk/src/gocept/collmex/collmex.py
   gocept.collmex/trunk/src/gocept/collmex/testing.py

Modified: gocept.collmex/trunk/src/gocept/collmex/collmex.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/collmex.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/collmex.py	Fri Nov 28 09:53:32 2008
(at)(at) -125,23 +125,24 (at)(at)
 
     def _post(self, data):
         data = 'LOGIN;%s;%s\n' % (self.username, self.password) + data
-
         content_type, body = gocept.collmex.utils.encode_multipart_formdata(
             [], [('fileName', 'api.csv', data)])
-
         request = urllib2.Request(
             'https://www.collmex.de/cgi-bin/cgi.exe?%s,0,data_exchange'
             % self.customer_id, body)
         request.add_header('Content-type', content_type)
-        result = urllib2.urlopen(request)
-        lines = list(csv.reader(result, dialect=CollmexDialect))
-        response = lines.pop()
-        assert len(response) >= 4
+        response = urllib2.urlopen(request)
+
+        lines = list(csv.reader(response, dialect=CollmexDialect))
+        response.close()
+        result = lines.pop()
+        assert len(result) >= 4
+
         record_type, message_type, message_id, message_text = (
-            response[:4])
+            result[:4])
         if record_type != 'MESSAGE':
             raise TypeError('API returned invalid response record: %r' %
-                            response)
+                            result)
         if message_type != 'S':
             raise APIError(message_id, message_text)
         return lines

Modified: gocept.collmex/trunk/src/gocept/collmex/testing.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/testing.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/testing.py	Fri Nov 28 09:53:32 2008
(at)(at) -52,3 +52,6 (at)(at)
     b.getLink('Verkauf', index=1).click()
     b.getControl(name='preis_1_preis').value = '5,00'
     b.getControl('Speichern').click()
+
+    # Explicitly close response to not leave open http objects.
+    b.mech_browser._response.close()

SVN: r7089 - gocept.collmex/trunk/src/gocept/collmex
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 09:57:47 [ FULL ]
Author: zagy
Date: Fri Nov 28 09:57:46 2008
New Revision: 7089

Log:
added get_invoice to interface



Modified:
   gocept.collmex/trunk/src/gocept/collmex/collmex.py
   gocept.collmex/trunk/src/gocept/collmex/interfaces.py

Modified: gocept.collmex/trunk/src/gocept/collmex/collmex.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/collmex.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/collmex.py	Fri Nov 28 09:57:46 2008
(at)(at) -85,7 +85,7 (at)(at)
     zope.interface.implements(gocept.collmex.interfaces.ICollmex)
 
     # XXX should go on CollmexDialect but the csv module's magic prevents it
-    NULL = '(NULL)'
+    NULL = gocept.collmex.interfaces.NULL
 
     def __init__(self, customer_id, company_id, username, password):
         self.customer_id = customer_id

Modified: gocept.collmex/trunk/src/gocept/collmex/interfaces.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/interfaces.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/interfaces.py	Fri Nov 28 09:57:46
2008
(at)(at) -3,6 +3,9 (at)(at)
 
 import zope.interface
 
+# NULL aka None for Collmex
+NULL = "(NULL)"
+
 
 class ICollmex(zope.interface.Interface):
     """Python binding for the Collmex API."""
(at)(at) -10,6 +13,10 (at)(at)
     def create_invoice(items):
         """Creates an invoice consisting of the given IInvoiceItems."""
 
+    def get_invoices(invoice_id=NULL, customer_id=NULL,
+                     start_date=NULL, end_date=NULL):
+        """Returns a list of IInvoiceItems maching given criteria."""
+
 
 class IInvoiceItem(zope.interface.Interface):
     """An invoice item from Collmex.

SVN: r7090 - in gocept.collmex/trunk: . src/gocept/collmex
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 10:17:37 [ FULL ]
Author: zagy
Date: Fri Nov 28 10:17:36 2008
New Revision: 7090

Log:
refactored creation of models to be easily extensible



Added:
   gocept.collmex/trunk/src/gocept/collmex/model.py   (contents, props changed)
Modified:
   gocept.collmex/trunk/setup.py
   gocept.collmex/trunk/src/gocept/collmex/README.txt
   gocept.collmex/trunk/src/gocept/collmex/collmex.py

Modified: gocept.collmex/trunk/setup.py
==============================================================================
--- gocept.collmex/trunk/setup.py	(original)
+++ gocept.collmex/trunk/setup.py	Fri Nov 28 10:17:36 2008
(at)(at) -26,6 +26,7 (at)(at)
     install_requires=[
         'setuptools',
         'transaction',
+        'zope.deprecation',
         'zope.interface',
         ],
     extras_require=dict(

Modified: gocept.collmex/trunk/src/gocept/collmex/README.txt
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/README.txt	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/README.txt	Fri Nov 28 10:17:36 2008
(at)(at) -26,7 +26,7 (at)(at)
 ...     os.environ['collmex_customer'], os.environ['collmex_company'],
 ...     os.environ['collmex_username'], os.environ['collmex_password'])
 >>> start_date = datetime.datetime.now()
->>> item = gocept.collmex.collmex.InvoiceItem()
+>>> item = gocept.collmex.model.InvoiceItem()
 >>> item['Kunden-Nr'] = '10000'
 >>> item['Rechnungsnummer'] = 100000
 >>> item['Menge'] = 3

Modified: gocept.collmex/trunk/src/gocept/collmex/collmex.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/collmex.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/collmex.py	Fri Nov 28 10:17:36 2008
(at)(at) -3,14 +3,15 (at)(at)
 # See also LICENSE.txt
 
 import StringIO
-import UserDict
 import csv
 import gocept.collmex.interfaces
 import gocept.collmex.utils
+import gocept.collmex.model
 import threading
 import transaction
 import transaction.interfaces
 import urllib2
+import zope.deprecation
 import zope.interface
 
 
(at)(at) -87,6 +88,10 (at)(at)
     # XXX should go on CollmexDialect but the csv module's magic prevents it
     NULL = gocept.collmex.interfaces.NULL
 
+    model_factory = {
+        'CMXINV': gocept.collmex.model.InvoiceItem,
+    }
+
     def __init__(self, customer_id, company_id, username, password):
         self.customer_id = customer_id
         self.company_id = company_id
(at)(at) -113,15 +118,30 (at)(at)
 
     def get_invoices(self, invoice_id=NULL, customer_id=NULL,
                      start_date=NULL, end_date=NULL):
+        return self._query_objects(
+            'INVOICE_GET',
+            invoice_id,
+            self.company_id,
+            customer_id,
+            date_to_collmex(start_date),
+            date_to_collmex(end_date),
+            0, 0, 0, 'gocept.collmex')
+
+    def _query_objects(self, function, *args):
         data = StringIO.StringIO()
         writer = csv.writer(data, dialect=CollmexDialect)
-        writer.writerow(
-            ['INVOICE_GET', invoice_id, self.company_id, customer_id,
-             date_to_collmex(start_date), date_to_collmex(end_date),
-             0, 0, 0, 'gocept.collmex'])
+        writer.writerow((function,) + args)
         lines = self._post(data.getvalue())
-        return [InvoiceItem(line) for line in lines
-                if line[0] == 'CMXINV']
+        result = []
+        for line in lines:
+            record_type = line[0]
+            factory = self.model_factory.get(record_type)
+            if factory is None:
+                continue
+            result.append(factory(line))
+        return result
+
+
 
     def _post(self, data):
         data = 'LOGIN;%s;%s\n' % (self.username, self.password) + data
(at)(at) -155,112 +175,8 (at)(at)
         return date.strftime('%Y%m%d')
 
 
-class InvoiceItem(UserDict.UserDict):
-    zope.interface.implements(gocept.collmex.interfaces.IInvoiceItem)
-
-    def __init__(self, row=[]):
-        UserDict.UserDict.__init__(self)
-
-        self['Satzart'] = 'CMXINV'
-        self['Rechnungsart'] = 0 # type invoice
-
-        for i in range(len(row)):
-            if row[i] == '':
-                row[i] = None
-            self[self.fields[i]] = row[i]
-
-    def __iter__(self):
-        result = []
-        for field in self.fields:
-            if field in self:
-                value = self[field]
-                if isinstance(value, unicode):
-                    value = value.encode('iso-8859-1')
-                yield value
-            else:
-                yield Collmex.NULL
-
-    fields = [
-        'Satzart',
-        'Rechnungsnummer',
-        'Position',
-        'Rechnungsart',
-        'Firma Nr',
-        'Auftrag Nr',
-        'Kunden-Nr',
-        'Anrede',
-        'Titel',
-        'Vorname',
-        'Name',
-        'Firma',
-        'Abteilung',
-        'Strasse',
-        'PLZ',
-        'Ort',
-        'Land',
-        'Telefon',
-        'Telefon2',
-        'Telefax',
-        'E-Mail',
-        'Kontonr',
-        'Blz',
-        'Abweichender Kontoinhaber',
-        'IBAN',
-        'BIC',
-        'Bank',
-        'USt.IdNr',
-        'Privatperson',
-        'Rechnungsdatum',
-        'Preisdatum',
-        'Zahlungsbedingung',
-        'Währung',
-        'Preisgruppe',
-        'Rabattgruppe',
-        'Schluss-Rabatt',
-        'Rabattgrund',
-        'Rechnungstext',
-        'Schlusstext',
-        'Internes Memo',
-        'Gelöscht',
-        'Sprache',
-        'Bearbeiter',
-        'Reserviert',
-        'Reserviert',
-        'Reserviert',
-        'Reserviert',
-        'Reserviert',
-        'Versandart',
-        'Versandkosten',
-        'Nachnahmegebühr',
-        'Lieferdatum',
-        'Lieferbedingung',
-        'Lieferbedingung Zusatz',
-        'Anrede Lieferung',
-        'Titel Lieferung',
-        'Vorname Lieferung',
-        'Name Lieferung',
-        'Firma Lieferung',
-        'Abteilung Lieferung',
-        'Strasse Lieferung',
-        'PLZ Lieferung',
-        'Ort Lieferung',
-        'Land Lieferung',
-        'Telefon Lieferung',
-        'Telefon2 Lieferung',
-        'Telefax Lieferung',
-        'E-Mail Lieferung',
-        'Positionstyp',
-        'Produktnummer',
-        'Produktbeschreibung',
-        'Mengeneinheit',
-        'Menge',
-        'Einzelpreis',
-        'Preismenge',
-        'Positionsrabatt',
-        'Positionswert',
-        'Produktart',
-        'Steuerklassifikation',
-        'Steuer auch im Ausland',
-        'Kundenauftragsposition',
-        'Erlösart',
-        ]
+# Backward compatibility
+InvoiceItem = gocept.collmex.model.InvoiceItem
+zope.deprecation.deprecated(
+    'InvoiceItem',
+    'InvoiceItem has been moved to gocept.collmex.model.InvoiceItem')

Added: gocept.collmex/trunk/src/gocept/collmex/model.py
==============================================================================
--- (empty file)
+++ gocept.collmex/trunk/src/gocept/collmex/model.py	Fri Nov 28 10:17:36 2008
(at)(at) -0,0 +1,124 (at)(at)
+# Copyright (c) 2008 gocept gmbh & co. kg
+# See also LICENSE.txt
+
+import UserDict
+import gocept.collmex.interfaces
+import zope.interface
+
+class Model(object, UserDict.UserDict):
+    """Base for collmex models."""
+
+    satzart = None
+
+    def __init__(self, row=[]):
+        UserDict.UserDict.__init__(self)
+
+        self['Satzart'] = self.satzart
+        self['Rechnungsart'] = 0 # type invoice
+
+        for i in range(len(row)):
+            if row[i] == '':
+                row[i] = None
+            self[self.fields[i]] = row[i]
+
+    def __iter__(self):
+        result = []
+        for field in self.fields:
+            if field in self:
+                value = self[field]
+                if isinstance(value, unicode):
+                    value = value.encode('iso-8859-1')
+                yield value
+            else:
+                yield gocept.collmex.interfaces.NULL
+
+
+class InvoiceItem(Model):
+
+    zope.interface.implements(gocept.collmex.interfaces.IInvoiceItem)
+
+    satzart = 'CMXINV'
+    fields = [
+        'Satzart',
+        'Rechnungsnummer',
+        'Position',
+        'Rechnungsart',
+        'Firma Nr',
+        'Auftrag Nr',
+        'Kunden-Nr',
+        'Anrede',
+        'Titel',
+        'Vorname',
+        'Name',
+        'Firma',
+        'Abteilung',
+        'Strasse',
+        'PLZ',
+        'Ort',
+        'Land',
+        'Telefon',
+        'Telefon2',
+        'Telefax',
+        'E-Mail',
+        'Kontonr',
+        'Blz',
+        'Abweichender Kontoinhaber',
+        'IBAN',
+        'BIC',
+        'Bank',
+        'USt.IdNr',
+        'Privatperson',
+        'Rechnungsdatum',
+        'Preisdatum',
+        'Zahlungsbedingung',
+        'Währung',
+        'Preisgruppe',
+        'Rabattgruppe',
+        'Schluss-Rabatt',
+        'Rabattgrund',
+        'Rechnungstext',
+        'Schlusstext',
+        'Internes Memo',
+        'Gelöscht',
+        'Sprache',
+        'Bearbeiter',
+        'Reserviert',
+        'Reserviert',
+        'Reserviert',
+        'Reserviert',
+        'Reserviert',
+        'Versandart',
+        'Versandkosten',
+        'Nachnahmegebühr',
+        'Lieferdatum',
+        'Lieferbedingung',
+        'Lieferbedingung Zusatz',
+        'Anrede Lieferung',
+        'Titel Lieferung',
+        'Vorname Lieferung',
+        'Name Lieferung',
+        'Firma Lieferung',
+        'Abteilung Lieferung',
+        'Strasse Lieferung',
+        'PLZ Lieferung',
+        'Ort Lieferung',
+        'Land Lieferung',
+        'Telefon Lieferung',
+        'Telefon2 Lieferung',
+        'Telefax Lieferung',
+        'E-Mail Lieferung',
+        'Positionstyp',
+        'Produktnummer',
+        'Produktbeschreibung',
+        'Mengeneinheit',
+        'Menge',
+        'Einzelpreis',
+        'Preismenge',
+        'Positionsrabatt',
+        'Positionswert',
+        'Produktart',
+        'Steuerklassifikation',
+        'Steuer auch im Ausland',
+        'Kundenauftragsposition',
+        'Erlösart',
+        ]

SVN: r7092 - in gocept.collmex/trunk: . src/gocept/collmex
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 10:36:56 [ FULL ]
Author: zagy
Date: Fri Nov 28 10:36:54 2008
New Revision: 7092

Log:
- Added ``get_customers`` to query customers (API ``CUSTOMER_GET``).



Modified:
   gocept.collmex/trunk/CHANGES.txt
   gocept.collmex/trunk/src/gocept/collmex/README.txt
   gocept.collmex/trunk/src/gocept/collmex/collmex.py
   gocept.collmex/trunk/src/gocept/collmex/interfaces.py
   gocept.collmex/trunk/src/gocept/collmex/model.py
   gocept.collmex/trunk/src/gocept/collmex/tests.py

Modified: gocept.collmex/trunk/CHANGES.txt
==============================================================================
--- gocept.collmex/trunk/CHANGES.txt	(original)
+++ gocept.collmex/trunk/CHANGES.txt	Fri Nov 28 10:36:54 2008
(at)(at) -5,6 +5,7 (at)(at)
 ----------------
 
 - Modifications for changed Collmex API.
+- Added ``get_customers`` to query customers (API ``CUSTOMER_GET``).
 
 0.1 (2008-10-14)
 ----------------

Modified: gocept.collmex/trunk/src/gocept/collmex/README.txt
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/README.txt	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/README.txt	Fri Nov 28 10:36:54 2008
(at)(at) -7,6 +7,19 (at)(at)
 http://www.collmex.de/cgi-bin/cgi.exe?1005,1,help,api.
 
 
+The collmex object
+------------------
+
+The collmex object is a central place to access collmex. In the Zope 3 jargon
+it is a global utility:
+
+>>> import os
+>>> import gocept.collmex.collmex
+>>> collmex = gocept.collmex.collmex.Collmex(
+...     os.environ['collmex_customer'], os.environ['collmex_company'],
+...     os.environ['collmex_username'], os.environ['collmex_password'])
+
+
 Transaction integration
 -----------------------
 
(at)(at) -16,15 +29,46 (at)(at)
 [#pre-flight-cleanup]_[#invalid-login]_
 
 
-Invoices
---------
+
+Customers: ``get_customers``
+----------------------------
+
+Customers can be listed using the get_customers method:
+
+>>> customers = collmex.get_customers()
+>>> customers
+[<gocept.collmex.model.Customer object at 0x...>,
+ <gocept.collmex.model.Customer object at 0x...>]
+>>> len(customers)
+2
+
+The first customer is the generic one:
+
+>>> customer = customers[0]
+>>> customer['Satzart']
+'CMXKND'
+>>> customer['Kundennummer']
+'9999'
+>>> customer['Firma']
+'Allgemeiner Gesch\xe4ftspartner'
+
+
+The second customer is one created during test setup:
+
+>>> customer = customers[1]
+>>> customer['Satzart']
+'CMXKND'
+>>> customer['Kundennummer']
+'10000'
+>>> customer['Firma']
+'Testkunden'
+
+Invoices: ``create_invoice`` and ``get_invoices``
+-------------------------------------------------
 
 Invoices are created using the ``create_invoice`` method:
 
 >>> import datetime
->>> collmex = gocept.collmex.collmex.Collmex(
-...     os.environ['collmex_customer'], os.environ['collmex_company'],
-...     os.environ['collmex_username'], os.environ['collmex_password'])
 >>> start_date = datetime.datetime.now()
 >>> item = gocept.collmex.model.InvoiceItem()
 >>> item['Kunden-Nr'] = '10000'
(at)(at) -61,12 +105,10 (at)(at)
 
 .. [#invalid-login] Invalid login information raises an exception:
 
-    >>> import os
-    >>> import gocept.collmex.collmex
-    >>> collmex = gocept.collmex.collmex.Collmex(
+    >>> collmex_invalid = gocept.collmex.collmex.Collmex(
     ...     os.environ['collmex_customer'], os.environ['collmex_company'],
     ...     os.environ['collmex_username'], 'invalid')
-    >>> collmex.get_invoices(customer_id='10000')
+    >>> collmex_invalid.get_invoices(customer_id='10000')
     Traceback (most recent call last):
         ...
     APIError: ('101004', 'Benutzer oder Kennwort nicht korrekt')

Modified: gocept.collmex/trunk/src/gocept/collmex/collmex.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/collmex.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/collmex.py	Fri Nov 28 10:36:54 2008
(at)(at) -88,8 +88,11 (at)(at)
     # XXX should go on CollmexDialect but the csv module's magic prevents it
     NULL = gocept.collmex.interfaces.NULL
 
+    system_identifier = 'gocept.collmex'
+
     model_factory = {
         'CMXINV': gocept.collmex.model.InvoiceItem,
+        'CMXKND': gocept.collmex.model.Customer,
     }
 
     def __init__(self, customer_id, company_id, username, password):
(at)(at) -125,7 +128,17 (at)(at)
             customer_id,
             date_to_collmex(start_date),
             date_to_collmex(end_date),
-            0, 0, 0, 'gocept.collmex')
+            0, 0,
+            0, self.system_identifier)
+
+    def get_customers(self, customer_id=NULL, text=NULL):
+        return self._query_objects(
+            'CUSTOMER_GET',
+            customer_id,
+            self.company_id,
+            text,
+            0, self.NULL, self.NULL, self.NULL, self.NULL, self.NULL,
+            0, self.system_identifier)
 
     def _query_objects(self, function, *args):
         data = StringIO.StringIO()

Modified: gocept.collmex/trunk/src/gocept/collmex/interfaces.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/interfaces.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/interfaces.py	Fri Nov 28 10:36:54
2008
(at)(at) -2,6 +2,7 (at)(at)
 # See also LICENSE.txt
 
 import zope.interface
+import zope.interface.common.mapping
 
 # NULL aka None for Collmex
 NULL = "(NULL)"
(at)(at) -17,9 +18,28 (at)(at)
                      start_date=NULL, end_date=NULL):
         """Returns a list of IInvoiceItems maching given criteria."""
 
+    def get_customers(customer_id=NULL, text=NULL):
+        """Returns a list of ICustomers matching given criteria."""
 
-class IInvoiceItem(zope.interface.Interface):
-    """An invoice item from Collmex.
 
-    Must be able to convert itself into a list.
+
+class IModel(zope.interface.common.mapping.IFullMapping):
+    """A collmex model.
+
+    A collmex model mapps the field names specified by the API to their
+    respective values.
+
     """
+
+    satzart = zope.interface.Attribute("The collmex model indicator.")
+
+    def __iter__(self):
+        """Iterate over vields in order specified by collmex API."""
+
+
+class IInvoiceItem(IModel):
+    """An invoice item from Collmex CMXINV"""
+
+
+class ICustomer(IModel):
+    """A customer CMXKND."""

Modified: gocept.collmex/trunk/src/gocept/collmex/model.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/model.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/model.py	Fri Nov 28 10:36:54 2008
(at)(at) -38,7 +38,7 (at)(at)
     zope.interface.implements(gocept.collmex.interfaces.IInvoiceItem)
 
     satzart = 'CMXINV'
-    fields = [
+    fields = (
         'Satzart',
         'Rechnungsnummer',
         'Position',
(at)(at) -121,4 +121,50 (at)(at)
         'Steuer auch im Ausland',
         'Kundenauftragsposition',
         'Erlösart',
-        ]
+        )
+
+
+class Customer(Model):
+
+    zope.interface.implements(gocept.collmex.interfaces.ICustomer)
+
+    satzart = 'CMXKND'
+    fields = (
+        'Satzart',
+        'Kundennummer',
+        'Firma Nr',
+        'Anrede',
+        'Titel',
+        'Vorname',
+        'Name',
+        'Firma',
+        'Abteilung',
+        'Strasse',
+        'PLZ',
+        'Ort',
+        'Reserviert',
+        'Reserviert',
+        'Land',
+        'Telefon',
+        'Telefax',
+        'E-Mail',
+        'Kontonr',
+        'Blz',
+        'Iban',
+        'Bic',
+        'Bankname',
+        'Steuernummer',
+        'USt.IdNr',
+        'Zahlungsbedingung',
+        'Rabattgruppe',
+        'Lieferbedingung',
+        'Lieferbedingung Zusatz',
+        'Ausgabemedium',
+        'Kontoinhaber',
+        'Adressgruppe',
+        'Privatperson',
+        'Preisgruppe',
+        'Währung (ISO-Codes)',
+        'Vermittler',
+        'Kostenstelle',
+    )

Modified: gocept.collmex/trunk/src/gocept/collmex/tests.py
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/tests.py	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/tests.py	Fri Nov 28 10:36:54 2008
(at)(at) -5,8 +5,9 (at)(at)
 import zope.testing.doctest
 
 
-optionflags = zope.testing.doctest.INTERPRET_FOOTNOTES
-
+optionflags = (zope.testing.doctest.INTERPRET_FOOTNOTES |
+               zope.testing.doctest.NORMALIZE_WHITESPACE |
+               zope.testing.doctest.ELLIPSIS)
 
 def test_suite():
     suite = zope.testing.doctest.DocFileSuite(

SVN: r7093 - gocept.collmex/trunk/src/gocept/collmex
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 10:47:09 [ FULL ]
Author: zagy
Date: Fri Nov 28 10:47:08 2008
New Revision: 7093

Log:
footnotes require a space



Modified:
   gocept.collmex/trunk/src/gocept/collmex/README.txt

Modified: gocept.collmex/trunk/src/gocept/collmex/README.txt
==============================================================================
--- gocept.collmex/trunk/src/gocept/collmex/README.txt	(original)
+++ gocept.collmex/trunk/src/gocept/collmex/README.txt	Fri Nov 28 10:47:08 2008
(at)(at) -26,7 +26,7 (at)(at)
 gocept.collmex has support for transaction integration. All modifying calls
are
 buffered until the transaction is commited. XXX explain more.
 
-[#pre-flight-cleanup]_[#invalid-login]_
+[#pre-flight-cleanup]_ [#invalid-login]_

SVN: r7094 - gocept.collmex/trunk
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 10:48:46 [ FULL ]
Author: zagy
Date: Fri Nov 28 10:48:45 2008
New Revision: 7094

Log:
preparing release



Modified:
   gocept.collmex/trunk/CHANGES.txt

Modified: gocept.collmex/trunk/CHANGES.txt
==============================================================================
--- gocept.collmex/trunk/CHANGES.txt	(original)
+++ gocept.collmex/trunk/CHANGES.txt	Fri Nov 28 10:48:45 2008
(at)(at) -1,7 +1,7 (at)(at)
 Changes
 =======
 
-0.2 (unreleased)
+0.2 (2008-11-28)
 ----------------
 
 - Modifications for changed Collmex API.

SVN: r7095 - gocept.collmex/tags/0.2
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 10:48:54 [ FULL ]
Author: zagy
Date: Fri Nov 28 10:48:53 2008
New Revision: 7095

Log:
Tagging 0.2


Added:
   gocept.collmex/tags/0.2/
      - copied from r7094, gocept.collmex/trunk/

SVN: r7096 - gocept.collmex/tags/0.2
Christian Zagrodnick <cz(at)gocept.com>
2008-11-28 10:49:01 [ FULL ]
Author: zagy
Date: Fri Nov 28 10:49:00 2008
New Revision: 7096

Log:
0.2


Modified:
   gocept.collmex/tags/0.2/setup.py

Modified: gocept.collmex/tags/0.2/setup.py
==============================================================================
--- gocept.collmex/tags/0.2/setup.py	(original)
+++ gocept.collmex/tags/0.2/setup.py	Fri Nov 28 10:49:00 2008
(at)(at) -7,7 +7,7 (at)(at)
 
 setup(
     name='gocept.collmex',
-    version='0.2dev',
+    version='0.2',
     author='gocept',
     author_email='mail(at)gocept.com',
     description='Python-bindings for the Collmex import/export API',

MailBoxer