add a 'create doc' link next to mail number (#726)

This commit is contained in:
Frédéric Péters 2011-10-30 15:26:10 +01:00
parent be54cacaef
commit 2ae38f6950
3 changed files with 48 additions and 4 deletions

View File

@ -1,13 +1,14 @@
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal"
tal:omit-tag="">
<a id="" class="" href="#"
tal:omit-tag=""
tal:define="href view/href">
<a id="" class="" href="#" tal:condition="href"
tal:attributes="id view/id;
class view/klass;
style view/style;
title view/title;
lang view/lang;
href view/href;
href href;
onclick view/onclick;
ondblclick view/ondblclick;
onmousedown view/onmousedown;
@ -19,5 +20,6 @@
onkeydown view/onkeydown;
onkeyup view/onkeyup"><tal:block
condition="view/value" content="view/value"
/></a>
/></a><span tal:condition="not: href" tal:content="view/value"></span>
<a tal:condition="not: href" tal:attributes="href view/create_href">(créer document)</a>
</html>

View File

@ -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)

View File

@ -71,6 +71,12 @@
template="mail_id_display.pt"
/>
<browser:page
name="createDoc"
for=".widgets.IMailIdWidget"
permission="zope.Public"
class=".widgets.MailIdCreateDoc"/>
<z3c:widgetTemplate
mode="display"
widget=".interfaces.IMailRefIdWidget"