diff --git a/src/collective/task/interfaces.py b/src/collective/task/interfaces.py index c934918..d2ae464 100644 --- a/src/collective/task/interfaces.py +++ b/src/collective/task/interfaces.py @@ -4,9 +4,10 @@ import datetime from z3c.form.browser.select import SelectFieldWidget from zope import schema +from zope.interface import provider +from Products.CMFPlone.utils import base_hasattr from plone.autoform import directives as form -from plone.directives.form import default_value from plone.formwidget.datetime.z3cform.widget import DatetimeFieldWidget from plone.supermodel import model from plone.theme.interfaces import IDefaultPloneLayer @@ -22,12 +23,25 @@ class ICollectiveTaskLayer(IDefaultPloneLayer): """Marker interface that defines a Zope 3 browser layer.""" +@provider(schema.interfaces.IContextAwareDefaultFactory) +def deadlineDefaultValue(context): + """Default value for deadline field, copy deadline of the parent (context), + or set it to today+3 days at 12:00""" + if base_hasattr(context, 'deadline'): + return context.deadline + + date = datetime.datetime.today() + datetime.timedelta(days=3) + hour = datetime.time(12, 0) + return datetime.datetime.combine(date, hour) + + class IBaseTask(model.Schema): """Interface for all "tasks" content types""" title = schema.TextLine(title=_(u'Title')) note = schema.Text(title=_(u'Note'), required=False) deadline = schema.Datetime(title=_(u'Deadline'), + defaultFactory=deadlineDefaultValue, required=False) form.widget(deadline=DatetimeFieldWidget) @@ -57,11 +71,3 @@ class IBaseTask(model.Schema): form.widget(responsible=AjaxChosenMultiFieldWidget) form.order_after(note='responsible') - - -@default_value(field=IBaseTask['deadline']) -def deadlineDefaultValue(data): - """Default value for deadline field today+3 days at 18:00""" - date = datetime.datetime.today() + datetime.timedelta(days=3) - hour = datetime.time(12, 0) - return datetime.datetime.combine(date, hour)