diff --git a/browser/widget.py b/browser/widget.py new file mode 100644 index 0000000..c7d06a6 --- /dev/null +++ b/browser/widget.py @@ -0,0 +1,37 @@ +# +# Copyright (c) 2006 Helmut Merz helmutm@cy55.de +# +# 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 +# + +""" +Some possibly useful widgets. Provide via configure.zcml if you want to +use them. + +$Id$ +""" + +from zope.app.form.browser.sequencewidget import SequenceDisplayWidget + + +class SimpleListDisplayWidget(SequenceDisplayWidget): + + tag = '' + itemTag = '' + + def __call__(self): + contents = super(SimpleListDisplayWidget, self).__call__() + return contents.replace('\n', ' | ') + diff --git a/organize/interfaces.py b/organize/interfaces.py index 141980f..774c5c5 100644 --- a/organize/interfaces.py +++ b/organize/interfaces.py @@ -17,7 +17,7 @@ # """ -Interfaces for organizational stuff like persons and addresses. +Interfaces for organizational stuff like persons, addresses, tasks, ... $Id$ """ @@ -29,6 +29,11 @@ from zope.i18nmessageid import MessageFactory _ = MessageFactory('zope') +class SimpleList(schema.List): pass + +class LinesList(schema.List): pass + + class IPerson(Interface): """ Resembles a human being with a name (first and last name), a birth date, and a set of addresses. @@ -41,6 +46,15 @@ class IPerson(Interface): lastName = schema.TextLine( title=_(u'Last name'), description=_(u'The last name or surname'),) + email = schema.TextLine( + title=_(u'E-Mail address'), + description=_(u'The standard email address of the person'),) + phoneNumbers = SimpleList( + value_type=schema.TextLine(), + default=[], + title=_(u'Phone numbers'), + description=_(u'Note one or more phone numbers here'), + required=False,) birthDate = schema.Date( title=_(u'Date of birth'), description=_(u'The date of birth - should be a ' @@ -48,12 +62,54 @@ class IPerson(Interface): required=False,) age = schema.Int( - title=_(u'Age'), - description=_(u'The current age in full years, so this should ' - 'be an integer calculated dynamically, i.e. a read-only ' - 'attribute'), - readonly=True) + title=_(u'Age'), + description=_(u'The current age in full years'), + readonly=True) addresses = Attribute('A mapping whose values provide the IAddress ' 'interface') + +class IAddress(Interface): + """ A postal address of a person or institution. + """ + + street = schema.TextLine( + title=_(u'Street, number'), + description=_(u'Street and number'), + required=False,) + zipcode = schema.TextLine( + title=_(u'ZIP code'), + description=_(u'ZIP code, postal code'), + required=False,) + city = schema.TextLine( + title=_(u'City'), + description=_(u'Name of the city'), + required=True,) + country = schema.TextLine( + title=_(u'Country code'), + description=_(u'International two-letter country code'), + required=False,) + lines = LinesList( + value_type=schema.TextLine(), + default=[], + title=_(u'Additional lines'), + description=_(u'Additional address lines'), + required=False,) + + +class ITask(Interface): + """ A task has a start date, an optional end date, and is usually + assigned to one or more persons. + """ + + start = schema.Date( + title=_(u'Start date'), + description=_(u'The date when the task should start'), + required=False,) + end = schema.Date( + title=_(u'End date'), + description=_(u'The date until that the task should be ' + 'finished'), + required=False,) + diff --git a/organize/party.py b/organize/party.py index 5b49fa1..e0654f4 100644 --- a/organize/party.py +++ b/organize/party.py @@ -17,15 +17,16 @@ # """ -A set of simple application classes for contact management to be used -as an example for some of the cybertools packages. +A set of simple application classes for contact management; this may be used +as an example for some of the cybertools packages, but may also be the base +for some real life stuff. $Id$ """ from zope.interface import implements from datetime import date -from cybertools.organize.interfaces import IPerson +from cybertools.organize.interfaces import IPerson, IAddress class Person(object): @@ -55,6 +56,8 @@ class Person(object): class Address(object): + implements(IAddress) + def __init__(self, city, street=u'', lines=[], zipcode=None, country=None): self.lines = lines # a sequence of additional address lines diff --git a/organize/task.py b/organize/task.py index 51e21cd..80f1011 100644 --- a/organize/task.py +++ b/organize/task.py @@ -17,8 +17,7 @@ # """ -A set of simple application classes for contact management to be used -as an example for some of the cybertools packages. +Task management classes. $Id$ """