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" /> + +