Monday, September 26, 2011

Introducing collective.trajectory : URL Routing, in Plone!!

When I was working with Martijn Faassen, I was introduced to traject, which is a library written by Martijn for URL routing. It is available to be used in Grok using megrok.traject, also by Martijn.

From that experience, I had the idea of integrating traject with Plone content type, so that we can have neat things like:
  • multiple instance of SQL application, in a single site, where each instance have different database url.
  • Use plone as the frontend proxy to other applications, where items from that application can be accessed through plone.
  • Those above are my primary motivation, but who knows what else this thing might open possibility to

I'm also hoping by having URL routing we make it easier for non-zope programmers to start developing stuff on Plone, as thats the common mechanism used in other Python web frameworks, and ZODB and graph traversal is something unfamiliar.

I've uploaded the code into collective. Only tested it roughly, but it works here on my Plone 4.1 buildout.

https://svn.plone.org/svn/collective/collective.trajectory/trunk/README.txt

Have fun hacking :D

Sunday, September 25, 2011

Tracking email conversation in OpenERP Issue tracker.

So in Inigo we're trying to see whether we can use OpenERP for our support system. However, the email integration sucks, to the point that I had to hack it.

Hooking up email fetching to the issue module

This one is easy but not easily noticeable how to configure it. Take note that you need to use the extended UI.
  1. open : Sales > Configuration > Email > Email Servers
  2. Create an account to fetch from the support email account and hook the Model field to project.issue


Hooking up email sending for 'from' email

You'll to setup this before email sending from OpenERP will work.
  1. open: Tools > Configuration > Email Templates > Email Account
  2. Configure one smtp account with the support email address


Notifying a user when an issue is created

  1. open: Sales > Configuration > Automated Actions
  2. Create an automated action
  3. Set trigger date to creation date
  4. In actions tab, set responsible to the user who will receive the notification email
  5. In email action tab, set source address to the support email address, and tick "Send to responsible"


Patching so that tracking email works nicely

Open addons/project_issue/project_issue.py and patch message_update function by adding this before return res line.


for record in self.browse(cr, uid, ids, context=context):
obj = record
to_addr = record.email_from
if obj.user_id:
user_email = obj.user_id.address_id and obj.user_id.address_id.email or ''
if to_addr == msg['from']:
to_addr = user_email
if to_addr:
email_cc = (obj.email_cc or '').split(',')
email_cc = filter(None, email_cc)
if msg['from'] in email_cc:
email_cc.append(to_addr)
to_addr = user_email
email_cc = filter(lambda x: x != msg['from'], email_cc)
body = 'By %s: \n%s' % (msg['from'], msg['body'])
tools.email_send('support@inigo-tech.com',
[to_addr],
'Re: [%d] %s' % (obj.id, tools.ustr(obj.name)),
tools.ustr(body),
openobject_id=str(obj.id),
email_cc=email_cc)


Now your support team and client can converse directly in email and it'll be tracked in the support system. Not a neat implementation, but good enough for my use i think.

That also should get around the frustration with the totally-not-nice-bug-thread-UI which OpenERP uses.