Index: main/waeup.ikoba/trunk/src/waeup/ikoba/products/productoptions.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/products/productoptions.py	(revision 12307)
+++ main/waeup.ikoba/trunk/src/waeup/ikoba/products/productoptions.py	(revision 12307)
@@ -0,0 +1,106 @@
+## $Id$
+##
+## Copyright (C) 2012 Uli Fouquet & Henrik Bettermann
+## This program is free software; you can redistribute it and/or modify
+## it under the terms of the GNU General Public License as published by
+## the Free Software Foundation; either version 2 of the License, or
+## (at your option) any later version.
+##
+## This program is distributed in the hope that it will be useful,
+## but WITHOUT ANY WARRANTY; without even the implied warranty of
+## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+## GNU General Public License for more details.
+##
+## You should have received a copy of the GNU General Public License
+## along with this program; if not, write to the Free Software
+## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+##
+"""Components representing and aggregating product options.
+"""
+import grok
+from decimal import Decimal
+from zope.formlib.interfaces import IInputWidget, IDisplayWidget
+from zope.publisher.interfaces.browser import IBrowserRequest
+from zope.schema.fieldproperty import FieldProperty
+from zope.schema import Object
+from waeup.ikoba.interfaces import IProductOptionEntry, IProductOptionEntryField
+from waeup.ikoba.widgets.objectwidget import (
+    IkobaObjectWidget, IkobaObjectDisplayWidget
+    )
+
+class ProductOptionEntry(grok.Model):
+    """A product option entry contains a title, fee and currency.
+    """
+    grok.implements(IProductOptionEntry)
+    title = FieldProperty(IProductOptionEntry['title'])
+    fee = FieldProperty(IProductOptionEntry['fee'])
+    currency = FieldProperty(IProductOptionEntry['currency'])
+
+    def __init__(self, title=None, fee=None, currency=None):
+        super(ProductOptionEntry, self).__init__()
+        if title is not None:
+            self.title = title
+        if fee is not None:
+            self.fee = fee
+        if currency is not None:
+            self.currency = currency
+        return
+
+    def to_string(self):
+        """A string representation that can be used in exports.
+
+        Returned is a unicode string of format ``(u'<TITLE>',u'<FEE>',u'<CURR>')``.
+        """
+        string = u"(u'%s', u'%s', u'%s')" % (self.title, self.fee, self.currency)
+        string = string.replace("u'None'", "None")
+        return string
+
+    @classmethod
+    def from_string(cls, string):
+        """Create new ProductOptionEntry instance based on `string`.
+
+        The string is expected to be in format as delivered by
+        meth:`to_string`.
+
+        This is a classmethod. This means, you normally will call::
+
+          ProductOptionEntry.from_string(mystring)
+
+        i.e. use the `ProductOptionEntry` class, not an instance thereof.
+        """
+        string = string.replace("u''", "None")
+        title, fee, currency = eval(string)
+        try:
+            fee = Decimal(fee)
+        except TypeError:
+            pass
+        return cls(title, fee, currency)
+
+class ProductOptionEntryField(Object):
+    """A zope.schema-like field for usage in interfaces.
+
+    If you want to define an interface containing result entries, you
+    can do so like this::
+
+      class IMyInterface(Interface):
+          my_option_entry = ProductOptionEntryField()
+
+    Default widgets are registered to render result entry fields.
+    """
+    grok.implements(IProductOptionEntryField)
+
+    def __init__(self, **kw):
+        super(ProductOptionEntryField, self).__init__(IProductOptionEntry, **kw)
+        return
+
+# register IkobaObjectWidgets as default widgets for IProductOptionEntryFields
+@grok.adapter(IProductOptionEntryField, IBrowserRequest)
+@grok.implementer(IInputWidget)
+def result_entry_input_widget(obj, req):
+    return IkobaObjectWidget(obj, req, ProductOptionEntry)
+
+# register a display widget for IProductOptionEntryFields
+@grok.adapter(IProductOptionEntryField, IBrowserRequest)
+@grok.implementer(IDisplayWidget)
+def result_entry_display_widget(obj, req):
+    return IkobaObjectDisplayWidget(obj, req, ProductOptionEntry)
Index: main/waeup.ikoba/trunk/src/waeup/ikoba/schoolgrades.py
===================================================================
--- main/waeup.ikoba/trunk/src/waeup/ikoba/schoolgrades.py	(revision 12306)
+++ 	(revision )
@@ -1,106 +1,0 @@
-## $Id$
-##
-## Copyright (C) 2012 Uli Fouquet & Henrik Bettermann
-## This program is free software; you can redistribute it and/or modify
-## it under the terms of the GNU General Public License as published by
-## the Free Software Foundation; either version 2 of the License, or
-## (at your option) any later version.
-##
-## This program is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-## GNU General Public License for more details.
-##
-## You should have received a copy of the GNU General Public License
-## along with this program; if not, write to the Free Software
-## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-##
-"""Components representing and aggregating product options.
-"""
-import grok
-from decimal import Decimal
-from zope.formlib.interfaces import IInputWidget, IDisplayWidget
-from zope.publisher.interfaces.browser import IBrowserRequest
-from zope.schema.fieldproperty import FieldProperty
-from zope.schema import Object
-from waeup.ikoba.interfaces import IProductOptionEntry, IProductOptionEntryField
-from waeup.ikoba.widgets.objectwidget import (
-    IkobaObjectWidget, IkobaObjectDisplayWidget
-    )
-
-class ProductOptionEntry(grok.Model):
-    """A product option entry contains a title, fee and currency.
-    """
-    grok.implements(IProductOptionEntry)
-    title = FieldProperty(IProductOptionEntry['title'])
-    fee = FieldProperty(IProductOptionEntry['fee'])
-    currency = FieldProperty(IProductOptionEntry['currency'])
-
-    def __init__(self, title=None, fee=None, currency=None):
-        super(ProductOptionEntry, self).__init__()
-        if title is not None:
-            self.title = title
-        if fee is not None:
-            self.fee = fee
-        if currency is not None:
-            self.currency = currency
-        return
-
-    def to_string(self):
-        """A string representation that can be used in exports.
-
-        Returned is a unicode string of format ``(u'<TITLE>',u'<FEE>',u'<CURR>')``.
-        """
-        string = u"(u'%s', u'%s', u'%s')" % (self.title, self.fee, self.currency)
-        string = string.replace("u'None'", "None")
-        return string
-
-    @classmethod
-    def from_string(cls, string):
-        """Create new ProductOptionEntry instance based on `string`.
-
-        The string is expected to be in format as delivered by
-        meth:`to_string`.
-
-        This is a classmethod. This means, you normally will call::
-
-          ProductOptionEntry.from_string(mystring)
-
-        i.e. use the `ProductOptionEntry` class, not an instance thereof.
-        """
-        string = string.replace("u''", "None")
-        title, fee, currency = eval(string)
-        try:
-            fee = Decimal(fee)
-        except TypeError:
-            pass
-        return cls(title, fee, currency)
-
-class ProductOptionEntryField(Object):
-    """A zope.schema-like field for usage in interfaces.
-
-    If you want to define an interface containing result entries, you
-    can do so like this::
-
-      class IMyInterface(Interface):
-          my_option_entry = ProductOptionEntryField()
-
-    Default widgets are registered to render result entry fields.
-    """
-    grok.implements(IProductOptionEntryField)
-
-    def __init__(self, **kw):
-        super(ProductOptionEntryField, self).__init__(IProductOptionEntry, **kw)
-        return
-
-# register IkobaObjectWidgets as default widgets for IProductOptionEntryFields
-@grok.adapter(IProductOptionEntryField, IBrowserRequest)
-@grok.implementer(IInputWidget)
-def result_entry_input_widget(obj, req):
-    return IkobaObjectWidget(obj, req, ProductOptionEntry)
-
-# register a display widget for IProductOptionEntryFields
-@grok.adapter(IProductOptionEntryField, IBrowserRequest)
-@grok.implementer(IDisplayWidget)
-def result_entry_display_widget(obj, req):
-    return IkobaObjectDisplayWidget(obj, req, ProductOptionEntry)
