diff --git a/themis/fields/__init__.py b/themis/fields/__init__.py
index 83d7951..793e63c 100644
--- a/themis/fields/__init__.py
+++ b/themis/fields/__init__.py
@@ -30,6 +30,8 @@ from themis.fields.interfaces import IRelatedDocs
from themis.fields.interfaces import IMailId
from themis.fields.interfaces import IMailRefId
+from themis.fields.interfaces import IDocHistoLine, IDocHistoLines
+
from themis.fields.vocabs import SubjectsSource
from themis.fields.vocabs import LegislativeSessionsSource
@@ -372,3 +374,24 @@ class MailId(TextLine):
class MailRefId(TextLine):
implements(IMailRefId, IFromUnicode)
+
+class DocHistoLine(Field):
+ implements(IDocHistoLine, IFromUnicode)
+ date = None
+ comment = None
+
+class DocHistoLines(Field):
+ implements(IDocHistoLines, IList)
+ _type = list
+
+ def __init__(self, **kw):
+ self.required = False
+ self.value_type = DocHistoLine()
+ self.unique = True
+ self.min_length = None
+ self.max_length = None
+
+ for attr in ('min_length', 'max_length', 'unique', 'value_type'):
+ if attr in kw: del kw[attr]
+ super(DocHistoLines, self).__init__(**kw)
+
diff --git a/themis/fields/dochistoline_display.pt b/themis/fields/dochistoline_display.pt
new file mode 100644
index 0000000..192e659
--- /dev/null
+++ b/themis/fields/dochistoline_display.pt
@@ -0,0 +1,13 @@
+
+
+
+ TODO
+
+
diff --git a/themis/fields/dochistoline_input.pt b/themis/fields/dochistoline_input.pt
new file mode 100644
index 0000000..7a04e0b
--- /dev/null
+++ b/themis/fields/dochistoline_input.pt
@@ -0,0 +1,34 @@
+
diff --git a/themis/fields/editors.py b/themis/fields/editors.py
index 51206ad..918846d 100644
--- a/themis/fields/editors.py
+++ b/themis/fields/editors.py
@@ -16,6 +16,7 @@ from themis.fields import RelatedDoc
from themis.fields import RelatedDocs
from themis.fields import MailId
from themis.fields import MailRefId
+from themis.fields import DocHistoLines
from plone.schemaeditor.fields import FieldFactory
@interface.implementer(editor_ifaces.IFieldEditFormSchema)
@@ -53,3 +54,5 @@ RelatedDocsFactory = FieldFactory(RelatedDocs, u'Related Documents')
MailRefIdFactory = FieldFactory(MailRefId, u'Mail Reference')
MailIdFactory = FieldFactory(MailId, u'Mail Number')
+
+DocHistoLinesFactory = FieldFactory(DocHistoLines, u'Historic Lines')
diff --git a/themis/fields/editors.zcml b/themis/fields/editors.zcml
index 2ba160f..66484de 100644
--- a/themis/fields/editors.zcml
+++ b/themis/fields/editors.zcml
@@ -92,4 +92,9 @@
component=".editors.MailRefIdFactory"
/>
+
+
diff --git a/themis/fields/handlers.py b/themis/fields/handlers.py
index 9e26d9b..7b4e47e 100644
--- a/themis/fields/handlers.py
+++ b/themis/fields/handlers.py
@@ -25,6 +25,7 @@ if HAVE_SUPERMODEL:
from themis.fields import RelatedDocs
from themis.fields import MailId
from themis.fields import MailRefId
+ from themis.fields import DocHistoLines
class CommissionHandler_(BaseHandler):
pass
@@ -116,3 +117,8 @@ if HAVE_SUPERMODEL:
MailRefIdHandler = MailRefIdHandler_(MailRefId)
+ class DocHistoLinesHandler_(BaseHandler):
+ pass
+
+ DocHistoLinesHandler = DocHistoLinesHandler_(DocHistoLines)
+
diff --git a/themis/fields/handlers.zcml b/themis/fields/handlers.zcml
index 9e2d5d2..389a082 100644
--- a/themis/fields/handlers.zcml
+++ b/themis/fields/handlers.zcml
@@ -94,4 +94,9 @@
name="themis.fields.MailRefId"
/>
+
+
diff --git a/themis/fields/interfaces.py b/themis/fields/interfaces.py
index 28ab056..cf89c87 100644
--- a/themis/fields/interfaces.py
+++ b/themis/fields/interfaces.py
@@ -2,7 +2,7 @@ from zope.interface import Interface
from zope.schema.interfaces import IChoice, IField, IList, IDate
from zope import schema
-from z3c.form.interfaces import IOrderedSelectWidget, ITextWidget
+from z3c.form.interfaces import IWidget, IOrderedSelectWidget, ITextWidget
from z3c.relationfield.interfaces import IRelation, IRelationList
from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget
@@ -142,3 +142,13 @@ class IRelatedDocWidget(IAutocompleteWidget):
class IRelatedDocsWidget(IAutocompleteWidget):
pass
+
+class IDocHistoLine(IField):
+ date = schema.Date(title=u'Date', required=True)
+ comment = schema.TextLine(title=u'Commentaire', required=True)
+
+class IDocHistoLines(IList):
+ pass
+
+class IDocHistoLineWidget(IWidget):
+ pass
diff --git a/themis/fields/widgets.py b/themis/fields/widgets.py
index 57ec81f..d64e183 100644
--- a/themis/fields/widgets.py
+++ b/themis/fields/widgets.py
@@ -5,12 +5,13 @@ from zope.component import adapts, adapter
from Products.CMFCore.utils import getToolByName
-from z3c.form.interfaces import IFormLayer, IFieldWidget
-from z3c.form.widget import FieldWidget
+from z3c.form.interfaces import IFormLayer, IFieldWidget, NOVALUE
+from z3c.form.widget import Widget, FieldWidget
from collective.z3cform.datetimewidget import DateWidget
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
+from z3c.form.converter import BaseDataConverter
from themis.fields.interfaces import ICommission, ICommissions
from zope.schema.interfaces import IDate, IContextSourceBinder, ISource
@@ -28,6 +29,7 @@ from themis.fields.interfaces import IRelatedDocs
from themis.fields.interfaces import IMailId, IMailIdWidget
from themis.fields.interfaces import IMailRefId, IMailRefIdWidget
from themis.fields.interfaces import IRelatedDocWidget, IRelatedDocsWidget
+from themis.fields.interfaces import IDocHistoLineWidget, IDocHistoLine
from plone.formwidget.autocomplete.interfaces import IAutocompleteWidget
from plone.formwidget.autocomplete.widget import AutocompleteSelectionWidget, AutocompleteMultiSelectionWidget
@@ -301,3 +303,39 @@ def MailRefIdFieldWidget(field, request):
return FieldWidget(field, MailRefIdWidget(request))
+
+class DocHistoLineWidget(Widget):
+ implements(IDocHistoLineWidget)
+
+ def extract(self, default=NOVALUE):
+ from themis.fields import DocHistoLine
+ if not (self.name + '.comment') in self.request.form:
+ return NOVALUE
+ dochistoline = DocHistoLine()
+ has_value = None
+ for attr in ('comment', ):
+ setattr(dochistoline, attr, self.request.get(self.name + '.' + attr))
+ has_value = has_value or getattr(dochistoline, attr)
+ if not has_value:
+ return NOVALUE
+ return dochistoline
+
+@adapter(IDocHistoLine, IFormLayer)
+@implementer(IFieldWidget)
+def DocHistoLineFieldWidget(field, request):
+ return FieldWidget(field, DocHistoLineWidget(request))
+
+class DocHistoLineConverter(BaseDataConverter):
+ adapts(IDocHistoLine, IDocHistoLineWidget)
+
+ def toWidgetValue(self, value):
+ print 'XXX, histoline converter, to widget value!'
+ from themis.fields import DocHistoLine
+ if value is None:
+ return DocHistoLine()
+ return value
+
+ def toFieldValue(self, value):
+ print 'XXX, to field value'
+ return value
+
diff --git a/themis/fields/widgets.zcml b/themis/fields/widgets.zcml
index 3e81e58..e7763ed 100644
--- a/themis/fields/widgets.zcml
+++ b/themis/fields/widgets.zcml
@@ -76,4 +76,19 @@
template="mail_ref_id_display.pt"
/>
+
+
+
+
+
+
+