[IMP] edi: updated to latest web addon changes (needs review)

bzr revid: odo@openerp.com-20111005010839-nas8ddkp53pzgx4o
This commit is contained in:
Olivier Dony
2011-10-05 03:08:39 +02:00
parent c018cd9bf3
commit 1221bdccf3
10 changed files with 493 additions and 435 deletions
+3 -1
View File
@@ -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,
+3 -1
View File
@@ -1 +1,3 @@
import main
import edi_get
import edi_view
import edi_import
+26
View File
@@ -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}
+71
View File
@@ -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("""<!DOCTYPE html>
<html style="height: 100%%">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>OpenERP</title>
<link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon"/>
%(css)s
%(javascript)s
<script type="text/javascript" src="/web_edi/static/src/js/edi_import.js"></script>
<script type="text/javascript">
$(function() {
var c = new openerp.init();
openerp.web.edi_import(c)
var import_engine = new c.web.EdiImport("oe");
import_engine.import_edi('%(edi_url)s');
});
</script>
</head>
<body id="oe" class="openerp"></body>
</html>
""")
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(['<script type="text/javascript" src="%s"></script>'%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(['<link rel="stylesheet" href="%s">'%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
+92
View File
@@ -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("""<!DOCTYPE html>
<html style="height: 100%%">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>OpenERP</title>
<link rel="shortcut icon" href="/web/static/src/img/favicon.ico" type="image/x-icon"/>
%(css)s
%(javascript)s
<script type="text/javascript">
$(function() {
var c = new openerp.init();
var files = eval(%(edi_js)s);
for(var i=0; i<files.length; i++) {
if(openerp.web[files[i]]) {
openerp.web[files[i]](c);
}
}
var edi_engine = new c.web.EdiView("oe");
edi_engine.view_edi('%(token)s', '%(db)s');
});
</script>
</head>
<body id="oe" class="openerp"></body>
</html>
""")
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(['<script type="text/javascript" src="%s"></script>'%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(['<link rel="stylesheet" href="%s">'%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
-88
View File
@@ -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 = """
<!DOCTYPE html>
<html style="height: 100%">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>OpenERP</title>
<script type="text/javascript" src="/base/static/lib/underscore/underscore.js"></script>
<script type="text/javascript" src="/base/static/lib/underscore/underscore.string.js"></script>
<script type="text/javascript" src="/base/static/lib/jquery/jquery-1.5.2.js"></script>
<script type="text/javascript" src="/base/static/lib/json/json2.js"></script>
<script type="text/javascript" src="/base/static/lib/qweb/qweb2.js"></script>
<script type="text/javascript" src="/base/static/src/js/base.js"></script>
<script type="text/javascript" src="/base/static/src/js/chrome.js"></script>
<script type="text/javascript" src="/web_edi/static/src/js/edi.js"></script>
<link rel="stylesheet" href="/base/static/src/css/base.css" type="text/css"/>
"""
for js in js_list:
out += """<script type="text/javascript" src="%s"></script>""" %(js)
for css in css_list:
out += """<link rel="stylesheet" href="%s" type="text/css"/>""" %(css)
out += """<script language="javascript" type="text/javascript">
QWeb = window.QWeb || new QWeb2.Engine();
var view_edi = new openerp.edi.EdiView("oe");
view_edi.view_edi('"""+token+"""', '"""+db+"""');
</script>
<body id="oe" class="openerp">
</body>
</head>
</html>
"""
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
-345
View File
@@ -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 = $('<div>')
.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; i<path.length; ++i) {
object_match = object_match[path[i]];
if (object_match === undefined) {
// Object is not found
return undefined;
}
}
return object_match;
},
add: function (key, object_path) {
this.map[key] = object_path;
return this;
},
clone: function (mapping) {
return new openerp.edi.Registry(
_.extend({}, this.map, mapping || {}));
}
});
openerp.edi.forms = new openerp.edi.Registry({
'edi_center' : 'openerp.edi.EdiViewCenter',
'edi_right_top' : 'openerp.edi.EdiViewRightTop',
'edi_right_bottom' : 'openerp.edi.EdiViewRightBottom',
});
openerp.web_edi = function(openerp) {
openerp.web_edi.EdiImport = openerp.base.Controller.extend({
init: function() {
var self = this;
this._super(null);
},
start: function() {
},
import_edi: function(edi_url) {
var self = this;
var params = {};
if(edi_url) params['edi_url'] = decodeURIComponent(edi_url);
if(!this.session) {
this.session = new openerp.base.Session("oe_errors");
this.session.start();
this.session.session_restore();
}
this.rpc('/edi/import_edi', params, function(response){
if (response.length) {
$('<div>Import successful, click Ok to see the new document</div>').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:
+75
View File
@@ -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) {
$('<div>Import successful, click Ok to see the new document</div>').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:
+148
View File
@@ -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 = $('<div>')
.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:
+75
View File
@@ -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) {
},
});
}