diff --git a/themis/fields/mail_id_display.pt b/themis/fields/mail_id_display.pt
index ed74e67..7635294 100644
--- a/themis/fields/mail_id_display.pt
+++ b/themis/fields/mail_id_display.pt
@@ -1,13 +1,14 @@
-
+
+ />
+ (créer document)
diff --git a/themis/fields/widgets.py b/themis/fields/widgets.py
index 60bfe8c..3f60974 100644
--- a/themis/fields/widgets.py
+++ b/themis/fields/widgets.py
@@ -17,6 +17,8 @@ from collective.z3cform.datetimewidget import DateWidget
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from Products.Five.browser import BrowserView
+from plone.dexterity.factory import DexterityFactory
+
from zc.relation.interfaces import ICatalog
from zope.app.intid.interfaces import IIntIds
@@ -276,6 +278,9 @@ def RelatedDocsFieldWidget(field, request):
class MailIdWidget(TextWidget):
implements(IMailIdWidget)
+ security = ClassSecurityInfo()
+ security.declareObjectPublic()
+
def get_matching_object(self):
catalog = getToolByName(self.context, 'portal_catalog')
results = catalog(themis_mail_ref=self.value)
@@ -292,6 +297,37 @@ class MailIdWidget(TextWidget):
return object.absolute_url()
return None
+ def create_href(self):
+ form_url = self.request.getURL()
+ return "%s/++widget++%s/@@createDoc" % (form_url, self.name)
+
+
+class MailIdCreateDoc(BrowserView):
+ def __call__(self):
+ from themis.config.utils import get_document_type_for_mail, get_document_location_for_mail
+ mail = self.context.context
+
+ document_type = get_document_type_for_mail(mail)
+ if document_type is None:
+ IStatusMessage(self.request).add(_(u"No associated document type"), 'warning')
+ return self.request.response.redirect(mail.absolute_url())
+
+ document_location = get_document_location_for_mail(mail)
+ if not document_location:
+ IStatusMessage(self.request).add(_(u"No associated document location"), 'warning')
+ return self.request.response.redirect(mail.absolute_url())
+
+ folder = getToolByName(self.context, 'portal_url').getPortalObject()
+ for part in document_location.split('/'):
+ if not part:
+ continue
+ folder = getattr(folder, part)
+
+ folder.invokeFactory(document_type, id=mail.id, title=mail.title,
+ mail_ref_id=mail.numero_courrier)
+ document_object = getattr(folder, mail.id)
+
+ return self.request.response.redirect(document_object.absolute_url())
@adapter(IMailId, IFormLayer)
@implementer(IFieldWidget)
diff --git a/themis/fields/widgets.zcml b/themis/fields/widgets.zcml
index bada1c5..279e056 100644
--- a/themis/fields/widgets.zcml
+++ b/themis/fields/widgets.zcml
@@ -71,6 +71,12 @@
template="mail_id_display.pt"
/>
+
+