From 1221bdccf35186100259d79398e12410bd076bac Mon Sep 17 00:00:00 2001 From: Olivier Dony Date: Wed, 5 Oct 2011 03:08:39 +0200 Subject: [PATCH] [IMP] edi: updated to latest web addon changes (needs review) bzr revid: odo@openerp.com-20111005010839-nas8ddkp53pzgx4o --- addons/edi/__openerp__.py | 4 +- addons/edi/controllers/__init__.py | 4 +- addons/edi/controllers/edi_get.py | 26 ++ addons/edi/controllers/edi_import.py | 71 +++++ addons/edi/controllers/edi_view.py | 92 +++++++ addons/edi/controllers/main.py | 88 ------ addons/edi/static/src/js/edi.js | 345 ------------------------ addons/edi/static/src/js/edi_import.js | 75 ++++++ addons/edi/static/src/js/edi_view.js | 148 ++++++++++ addons/edi/static/src/js/sessionless.js | 75 ++++++ 10 files changed, 493 insertions(+), 435 deletions(-) create mode 100644 addons/edi/controllers/edi_get.py create mode 100644 addons/edi/controllers/edi_import.py create mode 100644 addons/edi/controllers/edi_view.py delete mode 100644 addons/edi/controllers/main.py delete mode 100644 addons/edi/static/src/js/edi.js create mode 100644 addons/edi/static/src/js/edi_import.js create mode 100644 addons/edi/static/src/js/edi_view.js create mode 100644 addons/edi/static/src/js/sessionless.js diff --git a/addons/edi/__openerp__.py b/addons/edi/__openerp__.py index 80aa8de2f9f..f3b11bbfadb 100644 --- a/addons/edi/__openerp__.py +++ b/addons/edi/__openerp__.py @@ -44,7 +44,9 @@ technical OpenERP documentation at http://doc.openerp.com 'test/edi_partner_test.yml', ], 'js': [ - 'static/src/js/edi.js' + 'static/src/js/sessionless.js', + 'static/src/js/edi_import.js', + 'static/src/js/edi_view.js', ], 'installable': True, 'active': False, diff --git a/addons/edi/controllers/__init__.py b/addons/edi/controllers/__init__.py index 039d9715fab..45a091bdacc 100644 --- a/addons/edi/controllers/__init__.py +++ b/addons/edi/controllers/__init__.py @@ -1 +1,3 @@ -import main \ No newline at end of file +import edi_get +import edi_view +import edi_import diff --git a/addons/edi/controllers/edi_get.py b/addons/edi/controllers/edi_get.py new file mode 100644 index 00000000000..1e8f61708c8 --- /dev/null +++ b/addons/edi/controllers/edi_get.py @@ -0,0 +1,26 @@ +import werkzeug.wrappers +import web.common.dispatch as openerpweb +import json + +class EDIGet(openerpweb.Controller): + # http://path.to.web.client:8080/web/get_edi?db=XXXX&token=XXXXXXXXXXX + _cp_path = "/web/get_edi" + + @openerpweb.httprequest + def index(self, req, token, db): + result = req.session.proxy('edi').get_edi_document(token, db) + response = werkzeug.wrappers.Response( + result, headers=[('Content-Type', 'text/html; charset=utf-8'), + ('Content-Length', len(result))]) + + return response + + @openerpweb.jsonrequest + def get_edi_document(self, req, token, db): + result = req.session.proxy('edi').get_edi_document(token, db) + document = json.loads(result) + model = document and document[0].get('__model') + return {'token': token, 'db': db, 'model':model.replace('.','_'), 'document':document} + + + diff --git a/addons/edi/controllers/edi_import.py b/addons/edi/controllers/edi_import.py new file mode 100644 index 00000000000..3f99f6cdfbb --- /dev/null +++ b/addons/edi/controllers/edi_import.py @@ -0,0 +1,71 @@ +import werkzeug.wrappers +import web.common.dispatch as openerpweb +import web.controllers.main as web +import json +import textwrap + + + +edi_import_template = textwrap.dedent(""" + + + + OpenERP + + + %(css)s + %(javascript)s + + + + + +""") + + +class EDIImport(web.WebClient): + #http://localhost:8002/web/import_edi?edi_url=XXXXX + # Note: edi_url should have url which passed from encodeURIComponent function + _cp_path = "/web/import_edi" + + + @openerpweb.httprequest + def index(self, req, edi_url): + # script tags + addons = ['web'] + jslist = ['/web/webclient/js'] + if req.debug: + jslist = [i + '?debug=' + str(time.time()) for i in web.manifest_glob(req.config.addons_path, addons, 'js')] + js = "\n ".join([''%i for i in jslist]) + + # css tags + csslist = ['/web/webclient/css'] + if req.debug: + csslist = [i + '?debug=' + str(time.time()) for i in web.manifest_glob(req.config.addons_path, addons, 'css')] + css = "\n ".join([''%i for i in csslist]) + + r = edi_import_template % { + 'javascript': js, + 'css': css, + 'edi_url': edi_url, + } + return r + + @openerpweb.jsonrequest + def import_edi_url(self, req, edi_url): + # call EDI Service: import_edi_url + result = req.session.proxy('edi').import_edi_url(req.session._db, req.session._uid, req.session._password, edi_url) + + return result + diff --git a/addons/edi/controllers/edi_view.py b/addons/edi/controllers/edi_view.py new file mode 100644 index 00000000000..e2e73c05119 --- /dev/null +++ b/addons/edi/controllers/edi_view.py @@ -0,0 +1,92 @@ +import werkzeug.wrappers +import web.common.dispatch as openerpweb +import web.controllers.main as web +import json +import textwrap + +edi_view_template = textwrap.dedent(""" + + + + OpenERP + + %(css)s + %(javascript)s + + + + +""") + +def edi_addons(): + _addons = ['web', 'web_edi'] + for addon in openerpweb.addons_module: + if addon in _addons: + continue + manifest = openerpweb.addons_manifest.get(addon, {}) + edi_addon = manifest.get('edi', False) + + if edi_addon: + _addons.append(addon) + return _addons + +class EDIView(openerpweb.Controller): + # http://path.to.web.client:8080/web/view_edi?db=XXX&token=XXXXXXXXXXX + _cp_path = "/web/view_edi" + + @openerpweb.httprequest + def css(self, req): + files = web.manifest_glob(req.config.addons_path, edi_addons(), 'css') + content,timestamp = web.concat_files(req.config.addons_path, files) + # TODO request set the Date of last modif and Etag + return req.make_response(content, [('Content-Type', 'text/css')]) + + @openerpweb.httprequest + def js(self, req): + files = web.manifest_glob(req.config.addons_path, edi_addons(), 'js') + content,timestamp = web.concat_files(req.config.addons_path, files) + # TODO request set the Date of last modif and Etag + return req.make_response(content, [('Content-Type', 'application/javascript')]) + + @openerpweb.httprequest + def index(self, req, token, db): + # script tags + addons = edi_addons() + jslist = ['/web/view_edi/js'] + if req.debug: + jslist = [i + '?debug=' + str(time.time()) for i in web.manifest_glob(req.config.addons_path, addons, 'js')] + js = "\n ".join([''%i for i in jslist]) + + # css tags + csslist = ['/web/view_edi/css'] + if req.debug: + csslist = [i + '?debug=' + str(time.time()) for i in web.manifest_glob(req.config.addons_path, addons, 'css')] + css = "\n ".join([''%i for i in csslist]) + + js_files = [js_file.split('/')[-1].split('.')[0] for js_file in web.manifest_glob(req.config.addons_path, edi_addons(), 'js')] + + r = edi_view_template % { + 'javascript': js, + 'css': css, + 'token': token, + 'db': db, + 'edi_js': js_files + } + return r + + + diff --git a/addons/edi/controllers/main.py b/addons/edi/controllers/main.py deleted file mode 100644 index 6f4a8d9657e..00000000000 --- a/addons/edi/controllers/main.py +++ /dev/null @@ -1,88 +0,0 @@ -#from base.controllers.main import View -import web.common as openerpweb -import json -import cherrypy - -class EDIView(openerpweb.Controller): - # http://path.to.web.client:8080/edi/view_edi?db=XXX&token=XXXXXXXXXXX - _cp_path = "/edi/view_edi" - - @openerpweb.httprequest - def index(self, req, token, db): - js_list = [] - css_list = [] - for addon in openerpweb.addons_module: - if addon in ['web_edi']: - continue - manifest = openerpweb.addons_manifest.get(addon, {}) - edi_addon = manifest.get('edi', False) - - if edi_addon: - js_list += map(lambda x: '/'+addon+'/'+x, manifest.get('js', [])) - css_list += map(lambda x: '/'+addon+'/'+x, manifest.get('css', [])) - - out = """ - - - - - OpenERP - - - - - - - - - - """ - for js in js_list: - out += """""" %(js) - for css in css_list: - out += """""" %(css) - out += """ - - - - - - """ - return out - -class EDIGet(openerpweb.Controller): - # http://path.to.web.client:8080/edi/get_edi?db=XXXX&token=XXXXXXXXXXX - _cp_path = "/edi/get_edi" - - @openerpweb.httprequest - def index(self, req, token, db): - response = req.session.proxy('edi').get_edi_document(token, db) - cherrypy.response.headers['Content-Type'] = 'application/json' - cherrypy.response.headers['Content-Length'] = len(response) - return response - - @openerpweb.jsonrequest - def get_edi_document(self, req, token, db): - response = req.session.proxy('edi').get_edi_document(token, db) - document = json.loads(response) - model = document and document[0].get('__model') - cherrypy.response.headers['Content-Type'] = 'application/json' - cherrypy.response.headers['Content-Length'] = len(response) - return {'token': token, 'db': db, 'model':model.replace('.','_'), 'document':response} - -class EDIImport(openerpweb.Controller): - #http://localhost:8002/base/static/src/base.html?import_edi&edi_url=XXXXX - # Note: edi_url should have url which passed from encodeURIComponent function - _cp_path = "/edi/import_edi" - - @openerpweb.jsonrequest - def index(self, req, edi_url): - # call EDI Service: import_edi_url - print 'EDI_IMPORT', req, edi_url - res = req.session.proxy('edi').import_edi_url(req.session._db, req.session._uid, req.session._password, edi_url) - return res - diff --git a/addons/edi/static/src/js/edi.js b/addons/edi/static/src/js/edi.js deleted file mode 100644 index be19feff197..00000000000 --- a/addons/edi/static/src/js/edi.js +++ /dev/null @@ -1,345 +0,0 @@ -/*--------------------------------------------------------- - * OpenERP Web_edi - *---------------------------------------------------------*/ -// -openerp.edi = {} - -openerp.edi.EdiView = Class.extend({ - element_id: "oe", - template: "EdiView", - init: function(element_id){ - var self = this; - this.element_id = element_id; - this.$element = $('#' + element_id); - QWeb.add_template("/web_edi/static/src/xml/edi.xml"); - - }, - start: function() { - }, - view_edi: function(token, db) { - var params = {}; - if(token) params['token'] = token; - if(db) params['db'] = db; - this.rpc('/edi/get_edi/get_edi_document', params, this.on_response); - }, - on_response: function(value){ - this.element_id = "oe"; - this.template = "EdiView"; - this.$element = $('#' + this.element_id); - this.$element.html(QWeb.render(this.template, this)); - this.registry = openerp.edi.forms; - var model = value.model - var edi_document = value.document - - // EDI Center Frame - key_edi_center = 'edi_center' - edi_center = this.registry.get_object(key_edi_center + '_' + model) - if (edi_center == undefined){ - edi_center = this.registry.get_object(key_edi_center) - } - $edi_center_frame = this.$element.find('div.oe_edi_center'); - var center_frame = new (edi_center)($edi_center_frame, value); - center_frame.render(); - - // EDI Right TOP Frame - key_edi_right_top = 'edi_right_top' - edi_right_top = this.registry.get_object(key_edi_right_top + '_' + model) - if (edi_right_top == undefined){ - edi_right_top = this.registry.get_object(key_edi_right_top) - } - $edi_right_top_frame = this.$element.find('div.oe_edi_right_top'); - var right_top_frame = new (edi_right_top)($edi_right_top_frame, value); - right_top_frame.render(); - - //EDI Right Bottom Frame - key_edi_right_bottom = 'edi_right_bottom' - edi_right_bottom = this.registry.get_object(key_edi_right_bottom + '_' + model) - if (edi_right_bottom == undefined){ - edi_right_bottom = this.registry.get_object(key_edi_right_bottom) - } - $edi_right_bottom_frame = this.$element.find('div.oe_edi_right_bottom'); - var right_bottom_frame = new (edi_right_bottom)($edi_right_bottom_frame, value); - right_bottom_frame.render(); - }, - rpc: function(url, params, success_callback, error_callback) { - var self = this; - // Call using the rpc_mode - var deferred = $.Deferred(); - this.rpc_ajax(url, { - jsonrpc: "2.0", - method: "call", - params: params, - id:null - }).then(function () {deferred.resolve.apply(deferred, arguments);}, - function(error) {deferred.reject(error, $.Event());}); - return deferred.fail(function() { - deferred.fail(function(error, event) { - if (!event.isDefaultPrevented()) { - self.on_rpc_error(error, event); - } - }); - }).then(success_callback, error_callback).promise(); - }, - /** - * Raw JSON-RPC call - * - * @returns {jQuery.Deferred} ajax-based deferred object - */ - rpc_ajax: function(url, payload) { - var self = this; - this.on_rpc_request(); - // url can be an $.ajax option object - if (_.isString(url)) { - url = { - url: url - } - } - var ajax = _.extend({ - type: "POST", - url: url, - dataType: 'json', - contentType: 'application/json', - data: JSON.stringify(payload), - processData: false - }, url); - var deferred = $.Deferred(); - $.ajax(ajax).done(function(response, textStatus, jqXHR) { - self.on_rpc_response(); - if (response.error) { - if (response.error.data.type == "session_invalid") { - self.uid = false; - self.on_session_invalid(function() { - self.rpc(url, payload.params, - function() {deferred.resolve.apply(deferred, arguments);}, - function(error, event) {event.preventDefault(); - deferred.reject.apply(deferred, arguments);}); - }); - } else { - deferred.reject(response.error); - } - } else { - deferred.resolve(response["result"], textStatus, jqXHR); - } - }).fail(function(jqXHR, textStatus, errorThrown) { - self.on_rpc_response(); - var error = { - code: -32098, - message: "XmlHttpRequestError " + errorThrown, - data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] } - }; - deferred.reject(error); - }); - return deferred.promise(); - }, - on_rpc_request: function() { - }, - on_rpc_response: function() { - }, - on_rpc_error: function(error) { - }, -}); - - - -openerp.edi.EdiViewCenter = Class.extend({ - init: function(element, edi){ - var self = this; - this.edi_document = edi.document; - this.$element = element; - QWeb.add_template("/web_edi/static/src/xml/edi.xml"); - }, - start: function() { - }, - render: function(){ - template = "EdiViewCenter"; - this.$element.append($(QWeb.render(template, {'view': this}))) - } -}); - -openerp.edi.EdiViewRightTop = Class.extend({ - init: function(element, edi){ - var self = this; - this.edi_document = edi.document; - this.$element = element; - QWeb.add_template("/web_edi/static/src/xml/edi.xml"); - this.$_element = $('
') - .appendTo(document.body) - .delegate('button.oe_edi_button_import', 'click', {'edi': edi} , this.do_import) - }, - start: function() { - }, - render: function(){ - template = "EdiViewRightTop"; - if (this.$current) { - this.$current.remove(); - } - this.$current = this.$_element.clone(true); - this.$current.empty().append(QWeb.render(template, this)); - this.$element.append(this.$current); - - }, - do_import: function(e){ - $element = $(e.view.document.body) - token = e.data.edi.token - db = e.data.edi.db - var current_url = $(location).attr('href') - var pathName = current_url.substring(0, current_url.lastIndexOf('/') +1); - - if ($element.find('#oe_edi_rd_import_openerp').attr('checked') == true) - { - // import EDI - server_url = $element.find('#oe_edi_txt_server_url').val() - edi_url = pathName + 'get_edi?db=' + db + '&token=' + token - edi_url = encodeURIComponent(edi_url) - window.location = 'http://' + server_url + '/base/static/src/base.html?import_edi&edi_url=' + edi_url - } - if ($element.find('#oe_edi_rd_import_saas_account').attr('checked') == true) - { - // create SAAS Account - } - if ($element.find('#oe_edi_rd_import_other').attr('checked') == true) - { - // GET EDI document - edi_url = pathName + 'get_edi?db=' + db + '&token=' + token - window.location = edi_url - } - } -}); - -openerp.edi.EdiViewRightBottom = Class.extend({ - init: function(element, edi){ - var self = this; - this.edi_document = edi.document; - this.$element = element; - QWeb.add_template("/web_edi/static/src/xml/edi.xml"); - }, - start: function() { - }, - render: function(){ - template = "EdiViewRightBottom"; - this.$element.append($(QWeb.render(template, this))) - } -}); - -openerp.edi.Registry = Class.extend({ - init: function (mapping) { - this.map = mapping || {}; - }, - - get_object: function (key) { - var path_string = this.map[key]; - if (path_string === undefined) { - // key is not Found - return undefined; - } - - var object_match = openerp; - var path = path_string.split('.'); - // ignore first section - for(var i=1; iImport successful, click Ok to see the new document
').dialog({ - modal: true, - title: 'Successful', - buttons: { - Ok: function() { - $(this).dialog("close"); - var action = { - "res_model": response[0][0], - "res_id": parseInt(response[0][1], 10), - "views":[[false,"form"]], - "type":"ir.actions.act_window", - "view_type":"form", - "view_mode":"form" - } - action.flags = { - search_view: false, - sidebar : false, - views_switcher : false, - action_buttons : false, - pager: false - } - var action_manager = new openerp.base.ActionManager(self.session, 'oe_app'); - - action_manager.start(); - action_manager.do_action(action); - } - } - - }); - } - else{ - $(QWeb.render("DialogWarning", "Sorry, Import is not successful.")).dialog({ - modal: true, - buttons: { - Ok: function() { - $(this).dialog("close"); - } - } - }); - } - - }); - } -}); -var parameters = jQuery.deparam(jQuery.param.querystring()); - - -if('import_edi' in parameters) { - var import_edi = new openerp.web_edi.EdiImport(); - import_edi.import_edi(parameters.edi_url); -} -} -// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: diff --git a/addons/edi/static/src/js/edi_import.js b/addons/edi/static/src/js/edi_import.js new file mode 100644 index 00000000000..5219676405f --- /dev/null +++ b/addons/edi/static/src/js/edi_import.js @@ -0,0 +1,75 @@ + +openerp.web.edi_import = function(openerp) { +var QWeb = new QWeb2.Engine(); +openerp.web.EdiImport = openerp.web.WebClient.extend({ + + init: function(element_id) { + this._super(element_id); + }, + start: function() { + this._super(); + }, + do_import: function(){ + var self = this; + self.rpc('/web/import_edi/import_edi_url', self.params, function(response){ + if (response.length) { + $('
Import successful, click Ok to see the new document
').dialog({ + modal: true, + title: 'Successful', + buttons: { + Ok: function() { + $(this).dialog("close"); + var action = { + "res_model": response[0][0], + "res_id": parseInt(response[0][1], 10), + "views":[[false,"form"]], + "type":"ir.actions.act_window", + "view_type":"form", + "view_mode":"form" + } + action.flags = { + search_view: false, + sidebar : false, + views_switcher : false, + action_buttons : false, + pager: false + } + var action_manager = new openerp.web.ActionManager(self); + action_manager.appendTo($("#oe_app")); + action_manager.start(); + action_manager.do_action(action); + } + } + + }); + } + else{ + $(QWeb.render("DialogWarning", "Sorry, Import is not successful.")).dialog({ + modal: true, + buttons: { + Ok: function() { + $(this).dialog("close"); + } + } + }); + } + }); + }, + import_edi: function(edi_url) { + var self = this; + this.params = {}; + + if(edi_url) this.params['edi_url'] = decodeURIComponent(edi_url); + + if (!this.session.db){ + this.start(); + this.session.on_session_valid.add_last(self.do_import); + + } + else{ + self.do_import(); + } + } +}); +} +// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: diff --git a/addons/edi/static/src/js/edi_view.js b/addons/edi/static/src/js/edi_view.js new file mode 100644 index 00000000000..713e7d1fe9f --- /dev/null +++ b/addons/edi/static/src/js/edi_view.js @@ -0,0 +1,148 @@ + +openerp.web.edi_view = function(openerp) { + openerp.web.edi_views = new openerp.web.Registry(); + var QWeb = new QWeb2.Engine(); + // EDI View Engine + openerp.web.EdiView = openerp.web.Sessionless.extend({ + init: function(element_id){ + var self = this; + this.template = "EdiView"; + this.element_id = element_id; + this.$element = $('#' + element_id); + QWeb.add_template("/web_edi/static/src/xml/edi.xml"); + + }, + start: function() { + }, + view_edi: function(token, db) { + var params = {}; + if(token) params['token'] = token; + if(db) params['db'] = db; + this.rpc('/web/get_edi/get_edi_document', params, this.on_response); + }, + + on_response: function(value){ + var self = this; + this.template = "EdiView"; + this.element_id = "oe"; + self.$element = $('#' + this.element_id); + self.$element.html(QWeb.render(self.template, this)); + + var edi_document = value.document; + + var render = function(key, element_id, response){ + var registry = openerp.web.edi_views; + model = response.model + // get namespace of view of particular model from registry + try { + edi_view = registry.get_object(key + '_' + model); + }catch (e) { + edi_view = undefined; + } + // if not found, take default namespace of view + if (edi_view == undefined){ + edi_view = registry.get_object(key) + } + $edi_frame = self.$element.find(element_id); + + // create instance of QWeb of view namespace + edi_qweb = new (edi_view)($edi_frame, response) + edi_qweb.render(); + }; + + // EDI Center Frame + render('view_center', 'div.oe_edi_center', value) + + // EDI Right TOP Frame + render('view_right_top', 'div.oe_edi_right_top', value) + + //EDI Right Bottom Frame + render('view_right_bottom', 'div.oe_edi_right_bottom', value) + + }, + + }); + +openerp.web.edi_views.add('view_center' , 'openerp.web.EdiViewCenter'); +openerp.web.EdiViewCenter = openerp.web.Class.extend({ + init: function(element, edi){ + var self = this; + this.edi_document = edi.document; + this.$element = element; + QWeb.add_template("/web_edi/static/src/xml/edi.xml"); + }, + start: function() { + }, + render: function(){ + template = "EdiViewCenter"; + this.$element.append($(QWeb.render(template, {'view': this}))) + } +}); + +openerp.web.edi_views.add('view_right_top' , 'openerp.web.EdiViewRightTop'); +openerp.web.EdiViewRightTop = openerp.web.Class.extend({ + init: function(element, edi){ + var self = this; + this.edi_document = edi.document; + this.$element = element; + QWeb.add_template("/web_edi/static/src/xml/edi.xml"); + this.$_element = $('
') + .appendTo(document.body) + .delegate('button.oe_edi_button_import', 'click', {'edi': edi} , this.do_import) + }, + start: function() { + }, + render: function(){ + template = "EdiViewRightTop"; + if (this.$current) { + this.$current.remove(); + } + this.$current = this.$_element.clone(true); + this.$current.empty().append(QWeb.render(template, this)); + this.$element.append(this.$current); + }, + do_import: function(e){ + $element = $(e.view.document.body) + token = e.data.edi.token + db = e.data.edi.db + var current_url = $(location).attr('href') + var pathName = current_url.substring(0, current_url.lastIndexOf('/') +1); + + if ($element.find('#oe_edi_rd_import_openerp').attr('checked') == 'checked') + { + // import EDI + server_url = $element.find('#oe_edi_txt_server_url').val() + edi_url = pathName + 'get_edi?db=' + db + '&token=' + token + edi_url = encodeURIComponent(edi_url) + window.location = 'http://' + server_url + '/web/import_edi?edi_url=' + edi_url + } + if ($element.find('#oe_edi_rd_import_saas_account').attr('checked') == 'checked') + { + // create SAAS Account + } + if ($element.find('#oe_edi_rd_import_other').attr('checked') == 'checked') + { + // GET EDI document + edi_url = pathName + 'get_edi?db=' + db + '&token=' + token + window.location = edi_url + } + } +}); + +openerp.web.edi_views.add('view_right_bottom' , 'openerp.web.EdiViewRightBottom'); +openerp.web.EdiViewRightBottom = openerp.web.Class.extend({ + init: function(element, edi){ + var self = this; + this.edi_document = edi.document; + this.$element = element; + QWeb.add_template("/web_edi/static/src/xml/edi.xml"); + }, + start: function() { + }, + render: function(){ + template = "EdiViewRightBottom"; + this.$element.append($(QWeb.render(template, this))) + } +}); +} +// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax: diff --git a/addons/edi/static/src/js/sessionless.js b/addons/edi/static/src/js/sessionless.js new file mode 100644 index 00000000000..8890ab938cd --- /dev/null +++ b/addons/edi/static/src/js/sessionless.js @@ -0,0 +1,75 @@ +openerp.web.sessionless = function(openerp) { + var QWeb = new QWeb2.Engine(); + openerp.web.Sessionless = openerp.web.SessionAware.extend({ + rpc: function(url, params, success_callback, error_callback) { + var self = this; + // Call using the rpc_mode + var deferred = $.Deferred(); + this.rpc_ajax(url, { + jsonrpc: "2.0", + method: "call", + params: params, + id:null + }).then(function () {deferred.resolve.apply(deferred, arguments);}, + function(error) {deferred.reject(error, $.Event());}); + return deferred.fail(function() { + deferred.fail(function(error, event) { + if (!event.isDefaultPrevented()) { + self.on_rpc_error(error, event); + } + }); + }).then(success_callback, error_callback).promise(); + }, + /** + * Raw JSON-RPC call + * + * @returns {jQuery.Deferred} ajax-webd deferred object + */ + rpc_ajax: function(url, payload) { + var self = this; + this.on_rpc_request(); + // url can be an $.ajax option object + if (_.isString(url)) { + url = { + url: url + } + } + var ajax = _.extend({ + type: "POST", + url: url, + dataType: 'json', + contentType: 'application/json', + data: JSON.stringify(payload), + processData: false + }, url); + var deferred = $.Deferred(); + $.ajax(ajax).done(function(response, textStatus, jqXHR) { + self.on_rpc_response(); + if (!response.error) { + deferred.resolve(response["result"], textStatus, jqXHR); + return; + } + if (response.error.data.type !== "session_invalid") { + deferred.reject(response.error); + return; + } + + }).fail(function(jqXHR, textStatus, errorThrown) { + self.on_rpc_response(); + var error = { + code: -32098, + message: "XmlHttpRequestError " + errorThrown, + data: {type: "xhr"+textStatus, debug: jqXHR.responseText, objects: [jqXHR, errorThrown] } + }; + deferred.reject(error); + }); + return deferred.promise(); + }, + on_rpc_request: function() { + }, + on_rpc_response: function() { + }, + on_rpc_error: function(error) { + }, + }); +}