diff --git a/addons/base/controllers/main.py b/addons/base/controllers/main.py
index 562571f10de..c9bd7ddfeab 100644
--- a/addons/base/controllers/main.py
+++ b/addons/base/controllers/main.py
@@ -9,6 +9,7 @@ import re
import simplejson
import textwrap
import xmlrpclib
+import time
from xml.etree import ElementTree
from cStringIO import StringIO
@@ -20,6 +21,8 @@ import openerpweb.nonliterals
from babel.messages.pofile import read_po
+_REPORT_POLLER_DELAY = 0.05
+
# Should move to openerpweb.Xml2Json
class Xml2Json:
# xml2json-direct
@@ -1275,3 +1278,25 @@ class Export(View):
return export_xls(field, result)
else:
return export_csv(field, result)
+
+class Export(View):
+ _cp_path = "/base/report"
+
+ @openerpweb.jsonrequest
+ def get_report(self, req, action):
+ report_srv = req.session.proxy("report")
+ context = req.session.eval_context(openerpweb.nonliterals.CompoundContext(req.context, \
+ action["context"]))
+
+ args = [req.session._db, req.session._uid, req.session._password, action["report_name"], context["active_ids"], {"id": context["active_id"], "model": context["active_model"], "report_type": action["report_type"]}, context]
+ report_id = report_srv.report(*args)
+ report = None
+ while True:
+ args2 = [req.session._db, req.session._uid, req.session._password, report_id]
+ report = report_srv.report_get(*args2)
+ if report["state"]:
+ break
+ time.sleep(_REPORT_POLLER_DELAY)
+
+ #TODO: ok now we've got the report, and so what?
+ return False
diff --git a/addons/base/static/src/js/boot.js b/addons/base/static/src/js/boot.js
index fff710a1d68..e6c9fab0831 100644
--- a/addons/base/static/src/js/boot.js
+++ b/addons/base/static/src/js/boot.js
@@ -50,7 +50,9 @@
openerp.base = function(instance) {
openerp.base.core(instance);
- openerp.base.dates(instance);
+ if (openerp.base.dates) {
+ openerp.base.dates(instance);
+ }
openerp.base.formats(instance);
openerp.base.chrome(instance);
openerp.base.data(instance);
diff --git a/addons/base/static/src/js/chrome.js b/addons/base/static/src/js/chrome.js
index a4a3b73cc77..720bc38d54a 100644
--- a/addons/base/static/src/js/chrome.js
+++ b/addons/base/static/src/js/chrome.js
@@ -479,8 +479,6 @@ openerp.base.Login = openerp.base.Widget.extend({
this.selected_login = localStorage.getItem('last_login_login_success');
}
if (jQuery.deparam(jQuery.param.querystring()).debug != undefined) {
- this.selected_db = this.selected_db || "trunk";
- this.selected_login = this.selected_login || "admin";
this.selected_password = this.selected_password || "a";
}
},
@@ -564,22 +562,25 @@ openerp.base.Login = openerp.base.Widget.extend({
});
openerp.base.Header = openerp.base.Widget.extend({
- init: function(parent, element_id) {
- this._super(parent, element_id);
- if (jQuery.deparam(jQuery.param.querystring()).debug !== undefined) {
- this.qs = '?debug'
- } else {
- this.qs = ''
- }
+ template: "Header",
+ identifier_prefix: 'oe-app-header-',
+ init: function(parent) {
+ this._super(parent);
+ this.qs = "?" + jQuery.param.querystring();
+ this.$content = $();
},
start: function() {
- return this.do_update();
+ this._super();
},
do_update: function () {
- this.$element.html(QWeb.render("Header", this));
+ this.$content = $(QWeb.render("Header-content", {widget: this}));
+ this.$content.appendTo(this.$element);
this.$element.find(".logout").click(this.on_logout);
return this.shortcut_load();
},
+ do_reset: function() {
+ this.$content.remove();
+ },
shortcut_load :function(){
var self = this,
sc = self.session.shortcuts,
@@ -749,21 +750,23 @@ openerp.base.WebClient = openerp.base.Widget.extend({
// Do you autorize this ? will be replaced by notify() in controller
openerp.base.Widget.prototype.notification = new openerp.base.Notification(this, "oe_notification");
- this.header = new openerp.base.Header(this, "oe_header");
+
+ this.header = new openerp.base.Header(this);
this.login = new openerp.base.Login(this, "oe_login");
this.header.on_logout.add(this.login.on_logout);
+ this.header.on_action.add(this.on_menu_action);
this.session.on_session_invalid.add(this.login.do_ask_login);
this.session.on_session_valid.add_last(this.header.do_update);
+ this.session.on_session_invalid.add_last(this.header.do_reset);
this.session.on_session_valid.add_last(this.on_logged);
this.menu = new openerp.base.Menu(this, "oe_menu", "oe_secondary_menu");
this.menu.on_action.add(this.on_menu_action);
- this.header.on_action.add(this.on_menu_action);
},
start: function() {
+ this.header.appendTo($("#oe_header"));
this.session.start();
- this.header.start();
this.login.start();
this.menu.start();
this.notification.notify("OpenERP Client", "The openerp client has been initialized.");
diff --git a/addons/base/static/src/js/form.js b/addons/base/static/src/js/form.js
index cfca39fb62f..bf649e5f374 100644
--- a/addons/base/static/src/js/form.js
+++ b/addons/base/static/src/js/form.js
@@ -1566,14 +1566,16 @@ openerp.base.form.FieldMany2One = openerp.base.form.Field.extend({
var self = this;
if (!self.value)
return;
- self.rpc("/base/action/load", {
- action_id: related[2].id,
- context: {
+ var additional_context = {
active_id: self.value[0],
active_ids: [self.value[0]],
active_model: self.field.relation
- }
+ };
+ self.rpc("/base/action/load", {
+ action_id: related[2].id,
+ context: additional_context
}, function(result) {
+ result.result.context = _.extend(result.result.context || {}, additional_context);
self.do_action(result.result);
});
}
diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js
index 2c1e8899ddd..6b8c8a4be4c 100644
--- a/addons/base/static/src/js/views.js
+++ b/addons/base/static/src/js/views.js
@@ -123,6 +123,14 @@ openerp.base.ActionManager = openerp.base.Widget.extend({
this.content_stop();
var ClientWidget = openerp.base.client_actions.get_object(action.tag);
(this.client_widget = new ClientWidget(this, action.params)).appendTo(this);
+ },
+ ir_actions_report_xml: function(action) {
+ this.rpc('/base/report/get_report', {
+ action: action,
+ context: {}
+ }).then(function(result) {
+ debugger;
+ });
}
});
@@ -438,14 +446,17 @@ openerp.base.Sidebar = openerp.base.Widget.extend({
//TODO niv: maybe show a warning?
return false;
}
+ var additional_context = {
+ active_id: ids[0],
+ active_ids: ids,
+ active_model: self.widget_parent.dataset.model
+ };
self.rpc("/base/action/load", {
action_id: item.action.id,
- context: {
- active_id: ids[0],
- active_ids: ids,
- active_model: self.widget_parent.dataset.model
- }
+ context: additional_context
}, function(result) {
+ result.result.context = _.extend(result.result.context || {},
+ additional_context);
result.result.flags = result.result.flags || {};
result.result.flags.new_window = true;
self.do_action(result.result);
diff --git a/addons/base/static/src/xml/base.xml b/addons/base/static/src/xml/base.xml
index 40bc7cb4c5a..c6bd9a1ee19 100644
--- a/addons/base/static/src/xml/base.xml
+++ b/addons/base/static/src/xml/base.xml
@@ -326,15 +326,19 @@
-
-
-
-
+
+