add a 'create doc' link next to mail number (#726)
This commit is contained in:
parent
be54cacaef
commit
2ae38f6950
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"
|
||||
|
|
Reference in New Issue