[FIX] edi loading
[odoo/odoo.git] / addons / edi / controllers / main.py
1 import json
2 import textwrap
3
4 import simplejson
5 import werkzeug.wrappers
6
7 import web.common.http as openerpweb
8 import web.controllers.main
9
10 class EDI(openerpweb.Controller):
11     # http://hostname:8069/edi/view?db=XXXX&token=XXXXXXXXXXX
12     # http://hostname:8069/edi/import_url?url=URIEncodedURL
13     _cp_path = "/edi"
14
15     def template(self, req, mods='web,edi'):
16         self.wc = openerpweb.controllers_path['/web/webclient']
17         d = {}
18         d["js"] = "\n".join('<script type="text/javascript" src="%s"></script>'%i for i in self.wc.manifest_list(req, mods, 'js'))
19         d["css"] = "\n".join('<link rel="stylesheet" href="%s">'%i for i in self.wc.manifest_list(req, mods, 'css'))
20         d["modules"] = simplejson.dumps(mods.split(','))
21         return d
22
23     @openerpweb.httprequest
24     def view(self, req, db, token):
25         d = self.template(req)
26         d["init"] = 's.edi.edi_view("%s","%s");'%(db,token)
27         r = web.controllers.main.html_template % d
28         return r
29
30     @openerpweb.httprequest
31     def import_url(self, req, url):
32         d = self.template(req)
33         d["init"] = 's.edi.edi_import("%s");'%(url)
34         r = web.controllers.main.html_template % d
35         return r
36
37     @openerpweb.httprequest
38     def download(self, req, db, token):
39         result = req.session.proxy('edi').get_edi_document(db, token)
40         response = werkzeug.wrappers.Response( result, headers=[('Content-Type', 'text/html; charset=utf-8'), ('Content-Length', len(result))]) 
41         return response
42
43     @openerpweb.httprequest
44     def download_attachment(self, req, db, token):
45         result = req.session.proxy('edi').get_edi_document(db, token)
46         doc = json.loads(result)[0]
47         attachment = doc['__attachments'] and doc['__attachments'][0]
48         if attachment:
49             result = attachment["content"].decode('base64')
50             import email.Utils as utils
51
52             # Encode as per RFC 2231
53             filename_utf8 = attachment['file_name']
54             filename_encoded = "%s=%s" % ('filename*',
55                                           utils.encode_rfc2231(filename_utf8, 'utf-8'))
56             response = werkzeug.wrappers.Response(result, headers=[('Content-Type', 'application/pdf'),
57                                                                    ('Content-Disposition', 'inline; ' + filename_encoded),
58                                                                    ('Content-Length', len(result))])
59             return response
60
61     @openerpweb.httprequest
62     def binary(self, req, db, token, field_path="company_address.logo", content_type='image/png'):
63         result = req.session.proxy('edi').get_edi_document(db, token)
64         doc = json.loads(result)[0]
65         for name in field_path.split("."):
66             doc = doc[name]
67         result = doc.decode('base64')
68         response = werkzeug.wrappers.Response(result, headers=[('Content-Type', content_type),
69                                                                 ('Content-Length', len(result))])
70         return response
71
72     @openerpweb.jsonrequest
73     def get_edi_document(self, req, db, token):
74         result = req.session.proxy('edi').get_edi_document(db, token)
75         return json.loads(result)
76
77     @openerpweb.jsonrequest
78     def import_edi_url(self, req, url):
79         result = req.session.proxy('edi').import_edi_url(req.session._db, req.session._uid, req.session._password, url)
80         if len(result) == 1:
81             return {"action": web.controllers.main.clean_action(req, result[0][2])}
82         return True
83
84 #
85
86 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: