[IMP] edi: updated to latest web addon changes (needs review)
bzr revid: odo@openerp.com-20111005010839-nas8ddkp53pzgx4o
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
import main
|
||||
import edi_get
|
||||
import edi_view
|
||||
import edi_import
|
||||
|
||||
@@ -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}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
@@ -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:
|
||||
@@ -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:
|
||||
@@ -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) {
|
||||
},
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user