[MERGE] Merge With trunk upto revision no 1054.
bzr revid: ysa@tinyerp.com-20110919051426-lopfi9crlu90yzla
This commit is contained in:
commit
afdb618365
|
@ -5,8 +5,7 @@ import logging
|
|||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
try:
|
||||
def wsgi_postload():
|
||||
import openerp.wsgi
|
||||
import os
|
||||
import tempfile
|
||||
|
@ -24,9 +23,6 @@ try:
|
|||
#import openerp.wsgi
|
||||
openerp.wsgi.register_wsgi_handler(app)
|
||||
|
||||
except ImportError:
|
||||
_logger.info("standalone mode")
|
||||
|
||||
# TODO
|
||||
# if we detect that we are imported from the openerp server register common.Root() as a wsgi entry point
|
||||
|
||||
|
|
|
@ -45,5 +45,5 @@
|
|||
"static/src/css/base.css",
|
||||
"static/src/css/data_export.css",
|
||||
],
|
||||
'wsgi' : 'app',
|
||||
'post_load' : 'wsgi_postload',
|
||||
}
|
||||
|
|
|
@ -43,30 +43,30 @@ class OpenERPSession(object):
|
|||
|
||||
def build_connection(self):
|
||||
return openerplib.get_connection(hostname=self._server, port=self._port,
|
||||
database=self._db,
|
||||
database=self._db, login=self._login,
|
||||
user_id=self._uid, password=self._password)
|
||||
|
||||
def proxy(self, service):
|
||||
return self.build_connection().get_service(service)
|
||||
|
||||
def bind(self, db, uid, password):
|
||||
def bind(self, db, uid, login, password):
|
||||
self._db = db
|
||||
self._uid = uid
|
||||
self._login = login
|
||||
self._password = password
|
||||
|
||||
def login(self, db, login, password):
|
||||
uid = self.proxy('common').login(db, login, password)
|
||||
self.bind(db, uid, password)
|
||||
self._login = login
|
||||
self.bind(db, uid, login, password)
|
||||
|
||||
if uid: self.get_context()
|
||||
return uid
|
||||
|
||||
def assert_valid(self):
|
||||
def assert_valid(self, force=False):
|
||||
"""
|
||||
Ensures this session is valid (logged into the openerp server)
|
||||
"""
|
||||
self.build_connection().check_login(False)
|
||||
self.build_connection().check_login(force)
|
||||
|
||||
def execute(self, model, func, *l, **d):
|
||||
self.assert_valid()
|
||||
|
|
|
@ -301,6 +301,7 @@ class Session(openerpweb.Controller):
|
|||
}
|
||||
@openerpweb.jsonrequest
|
||||
def get_session_info(self, req):
|
||||
req.session.assert_valid(force=True)
|
||||
return {
|
||||
"uid": req.session._uid,
|
||||
"context": req.session.get_context() if req.session._uid else False,
|
||||
|
|
|
@ -501,6 +501,8 @@ openerp.web.Session = openerp.web.CallbackEnabled.extend( /** @lends openerp.web
|
|||
self.on_session_valid();
|
||||
else
|
||||
self.on_session_invalid();
|
||||
}, function() {
|
||||
self.on_session_invalid();
|
||||
});
|
||||
},
|
||||
/**
|
||||
|
@ -741,6 +743,59 @@ openerp.web.SessionAware = openerp.web.CallbackEnabled.extend(/** @lends openerp
|
|||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Base class for all visual components. Provides a lot of functionalities helpful
|
||||
* for the management of a part of the DOM.
|
||||
*
|
||||
* Widget handles:
|
||||
* - Rendering with QWeb.
|
||||
* - Life-cycle management and parenting (when a parent is destroyed, all its children are
|
||||
* destroyed too).
|
||||
* - Insertion in DOM.
|
||||
*
|
||||
* Widget also extends SessionAware for ease of use.
|
||||
*
|
||||
* Guide to create implementations of the Widget class:
|
||||
* ==============================================
|
||||
*
|
||||
* Here is a sample child class:
|
||||
*
|
||||
* MyWidget = openerp.base.Widget.extend({
|
||||
* // the name of the QWeb template to use for rendering
|
||||
* template: "MyQWebTemplate",
|
||||
* // identifier prefix, it is useful to put an obvious one for debugging
|
||||
* identifier_prefix: 'my-id-prefix-',
|
||||
*
|
||||
* init: function(parent) {
|
||||
* this._super(parent);
|
||||
* // stuff that you want to init before the rendering
|
||||
* },
|
||||
* start: function() {
|
||||
* this._super();
|
||||
* // stuff you want to make after the rendering, `this.$element` holds a correct value
|
||||
* this.$element.find(".my_button").click(/* an example of event binding * /);
|
||||
*
|
||||
* // if you have some asynchronous operations, it's a good idea to return
|
||||
* // a promise in start()
|
||||
* var promise = this.rpc(...);
|
||||
* return promise;
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* Now this class can simply be used with the following syntax:
|
||||
*
|
||||
* var my_widget = new MyWidget(this);
|
||||
* my_widget.appendTo($(".some-div"));
|
||||
*
|
||||
* With these two lines, the MyWidget instance was inited, rendered, it was inserted into the
|
||||
* DOM inside the ".some-div" div and its events were binded.
|
||||
*
|
||||
* And of course, when you don't need that widget anymore, just do:
|
||||
*
|
||||
* my_widget.stop();
|
||||
*
|
||||
* That will kill the widget in a clean way and erase its content from the dom.
|
||||
*/
|
||||
openerp.web.Widget = openerp.web.SessionAware.extend(/** @lends openerp.web.Widget# */{
|
||||
/**
|
||||
* The name of the QWeb template that will be used for rendering. Must be
|
||||
|
|
|
@ -2,6 +2,7 @@ openerp.web.search = function(openerp) {
|
|||
var QWeb = openerp.web.qweb;
|
||||
|
||||
openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.SearchView# */{
|
||||
template: "EmptyComponent",
|
||||
/**
|
||||
* @constructs openerp.web.SearchView
|
||||
* @extends openerp.web.Widget
|
||||
|
@ -12,8 +13,8 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
|
|||
* @param view_id
|
||||
* @param defaults
|
||||
*/
|
||||
init: function(parent, element_id, dataset, view_id, defaults) {
|
||||
this._super(parent, element_id);
|
||||
init: function(parent, dataset, view_id, defaults) {
|
||||
this._super(parent);
|
||||
this.dataset = dataset;
|
||||
this.model = dataset.model;
|
||||
this.view_id = view_id;
|
||||
|
@ -28,6 +29,7 @@ openerp.web.SearchView = openerp.web.Widget.extend(/** @lends openerp.web.Search
|
|||
this.ready = $.Deferred();
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
this.rpc("/web/searchview/load", {"model": this.model, "view_id":this.view_id}, this.on_loaded);
|
||||
return this.ready.promise();
|
||||
},
|
||||
|
@ -463,30 +465,6 @@ openerp.web.search.Widget = openerp.web.Widget.extend( /** @lends openerp.web.se
|
|||
}));
|
||||
}
|
||||
});
|
||||
openerp.web.search.FilterGroup = openerp.web.search.Widget.extend(/** @lends openerp.web.search.FilterGroup# */{
|
||||
template: 'SearchView.filters',
|
||||
/**
|
||||
* Inclusive group of filters, creates a continuous "button" with clickable
|
||||
* sections (the normal display for filters is to be a self-contained button)
|
||||
*
|
||||
* @constructs openerp.web.search.FilterGroup
|
||||
* @extends openerp.web.search.Widget
|
||||
*
|
||||
* @param {Array<openerp.web.search.Filter>} filters elements of the group
|
||||
* @param {openerp.web.SearchView} view view in which the filters are contained
|
||||
*/
|
||||
init: function (filters, view) {
|
||||
this._super(view);
|
||||
this.filters = filters;
|
||||
this.length = filters.length;
|
||||
},
|
||||
start: function () {
|
||||
this._super();
|
||||
_.each(this.filters, function (filter) {
|
||||
filter.start();
|
||||
});
|
||||
}
|
||||
});
|
||||
openerp.web.search.add_expand_listener = function($root) {
|
||||
$root.find('a.searchview_group_string').click(function (e) {
|
||||
$root.toggleClass('folded expanded');
|
||||
|
@ -533,6 +511,49 @@ openerp.web.search.Input = openerp.web.search.Widget.extend( /** @lends openerp.
|
|||
"get_domain not implemented for widget " + this.attrs.type);
|
||||
}
|
||||
});
|
||||
openerp.web.search.FilterGroup = openerp.web.search.Input.extend(/** @lends openerp.web.search.FilterGroup# */{
|
||||
template: 'SearchView.filters',
|
||||
/**
|
||||
* Inclusive group of filters, creates a continuous "button" with clickable
|
||||
* sections (the normal display for filters is to be a self-contained button)
|
||||
*
|
||||
* @constructs openerp.web.search.FilterGroup
|
||||
* @extends openerp.web.search.Input
|
||||
*
|
||||
* @param {Array<openerp.web.search.Filter>} filters elements of the group
|
||||
* @param {openerp.web.SearchView} view view in which the filters are contained
|
||||
*/
|
||||
init: function (filters, view) {
|
||||
this._super(view);
|
||||
this.filters = filters;
|
||||
this.length = filters.length;
|
||||
},
|
||||
start: function () {
|
||||
this._super();
|
||||
_.each(this.filters, function (filter) {
|
||||
filter.start();
|
||||
});
|
||||
},
|
||||
get_context: function () { },
|
||||
/**
|
||||
* Handles domains-fetching for all the filters within it: groups them.
|
||||
*/
|
||||
get_domain: function () {
|
||||
var domains = _(this.filters).chain()
|
||||
.filter(function (filter) { return filter.is_enabled(); })
|
||||
.map(function (filter) { return filter.attrs.domain; })
|
||||
.value();
|
||||
|
||||
if (!domains.length) { return; }
|
||||
if (domains.length === 1) { return domains[0]; }
|
||||
for (var i=domains.length; --i;) {
|
||||
domains.unshift(['|']);
|
||||
}
|
||||
return _.extend(new openerp.web.CompoundDomain(), {
|
||||
__domains: domains
|
||||
});
|
||||
}
|
||||
});
|
||||
openerp.web.search.Filter = openerp.web.search.Input.extend(/** @lends openerp.web.search.Filter# */{
|
||||
template: 'SearchView.filter',
|
||||
/**
|
||||
|
@ -586,12 +607,11 @@ openerp.web.search.Filter = openerp.web.search.Input.extend(/** @lends openerp.w
|
|||
}
|
||||
return this.attrs.context;
|
||||
},
|
||||
get_domain: function () {
|
||||
if (!this.is_enabled()) {
|
||||
return;
|
||||
}
|
||||
return this.attrs.domain;
|
||||
}
|
||||
/**
|
||||
* Does not return anything: filter domain is handled at the FilterGroup
|
||||
* level
|
||||
*/
|
||||
get_domain: function () { }
|
||||
});
|
||||
openerp.web.search.Field = openerp.web.search.Input.extend( /** @lends openerp.web.search.Field# */ {
|
||||
template: 'SearchView.field',
|
||||
|
|
|
@ -10,20 +10,19 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
|||
* view should be displayed (if there is one active).
|
||||
*/
|
||||
searchable: false,
|
||||
template: "FormView",
|
||||
form_template: "FormView",
|
||||
/**
|
||||
* @constructs openerp.web.FormView
|
||||
* @extends openerp.web.View
|
||||
*
|
||||
* @param {openerp.web.Session} session the current openerp session
|
||||
* @param {String} element_id this view's root element id
|
||||
* @param {openerp.web.DataSet} dataset the dataset this view will work with
|
||||
* @param {String} view_id the identifier of the OpenERP view object
|
||||
*
|
||||
* @property {openerp.web.Registry} registry=openerp.web.form.widgets widgets registry for this form view instance
|
||||
*/
|
||||
init: function(parent, element_id, dataset, view_id, options) {
|
||||
this._super(parent, element_id);
|
||||
init: function(parent, dataset, view_id, options) {
|
||||
this._super(parent);
|
||||
this.set_default_options(options);
|
||||
this.dataset = dataset;
|
||||
this.model = dataset.model;
|
||||
|
@ -45,6 +44,10 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
|||
_.defaults(this.options, {"always_show_new_button": true});
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
return this.init_view();
|
||||
},
|
||||
init_view: function() {
|
||||
if (this.embedded_view) {
|
||||
var def = $.Deferred().then(this.on_loaded);
|
||||
var self = this;
|
||||
|
@ -75,7 +78,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
|||
this.fields_view = data;
|
||||
var frame = new (this.registry.get_object('frame'))(this, this.fields_view.arch);
|
||||
|
||||
this.$element.html(QWeb.render(this.template, { 'frame': frame, 'view': this }));
|
||||
this.$element.html(QWeb.render(this.form_template, { 'frame': frame, 'view': this }));
|
||||
_.each(this.widgets, function(w) {
|
||||
w.start();
|
||||
});
|
||||
|
@ -399,7 +402,6 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
|||
if (!r.result) {
|
||||
// should not happen in the server, but may happen for internal purpose
|
||||
} else {
|
||||
console.debug(_.sprintf("The record #%s has been saved.", this.datarecord.id));
|
||||
if (success) {
|
||||
success(r);
|
||||
}
|
||||
|
@ -480,11 +482,11 @@ openerp.web.FormDialog = openerp.web.Dialog.extend({
|
|||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
this.form = new openerp.web.FormView(this, this.element_id, this.dataset, this.view_id, {
|
||||
this.form = new openerp.web.FormView(this, this.dataset, this.view_id, {
|
||||
sidebar: false,
|
||||
pager: false
|
||||
});
|
||||
this.form.start();
|
||||
this.form.appendTo(this.$element);
|
||||
this.form.on_created.add_last(this.on_form_dialog_saved);
|
||||
this.form.on_saved.add_last(this.on_form_dialog_saved);
|
||||
return this;
|
||||
|
@ -829,7 +831,7 @@ openerp.web.form.WidgetButton = openerp.web.form.Widget.extend({
|
|||
},
|
||||
on_click: function(saved) {
|
||||
var self = this;
|
||||
if ((!this.node.attrs.special && this.view.dirty_for_user && saved !== true) || !this.view.recordcount.id) {
|
||||
if ((!this.node.attrs.special && this.view.dirty_for_user && saved !== true) || !this.view.datarecord.id) {
|
||||
this.view.do_save(function() {
|
||||
self.on_click(true);
|
||||
});
|
||||
|
@ -2022,7 +2024,7 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({
|
|||
self.on_ui_change();
|
||||
});
|
||||
|
||||
this.list_view = new openerp.web.form.Many2ManyListView(this, this.list_id, this.dataset, false, {
|
||||
this.list_view = new openerp.web.form.Many2ManyListView(this, this.dataset, false, {
|
||||
'addable': 'Add',
|
||||
'selectable': self.multi_selection
|
||||
});
|
||||
|
@ -2031,7 +2033,7 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({
|
|||
self.is_started.resolve();
|
||||
});
|
||||
setTimeout(function () {
|
||||
self.list_view.start();
|
||||
self.list_view.appendTo($("#" + self.list_id));
|
||||
}, 0);
|
||||
},
|
||||
set_value: function(value) {
|
||||
|
@ -2141,7 +2143,7 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope
|
|||
this.searchview.stop();
|
||||
}
|
||||
this.searchview = new openerp.web.SearchView(this,
|
||||
this.element_id + "_search", this.dataset, false, {
|
||||
this.dataset, false, {
|
||||
"selectable": !this.options.disable_multiple_selection,
|
||||
"deletable": false
|
||||
});
|
||||
|
@ -2170,15 +2172,17 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope
|
|||
self.stop();
|
||||
});
|
||||
self.view_list = new openerp.web.form.SelectCreateListView(self,
|
||||
self.element_id + "_view_list", self.dataset, false,
|
||||
self.dataset, false,
|
||||
{'deletable': false});
|
||||
self.view_list.popup = self;
|
||||
self.view_list.do_show();
|
||||
self.view_list.start().then(function() {
|
||||
self.view_list.appendTo($("#" + self.element_id + "_view_list")).pipe(function() {
|
||||
self.view_list.do_show();
|
||||
}).pipe(function() {
|
||||
self.searchview.do_search();
|
||||
});
|
||||
|
||||
});
|
||||
this.searchview.start();
|
||||
this.searchview.appendTo($("#" + this.element_id + "_search"));
|
||||
},
|
||||
create_row: function(data) {
|
||||
var self = this;
|
||||
|
@ -2205,11 +2209,11 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope
|
|||
this.view_list.$element.hide();
|
||||
}
|
||||
this.dataset.index = null;
|
||||
this.view_form = new openerp.web.FormView(this, this.element_id + "_view_form", this.dataset, false);
|
||||
this.view_form = new openerp.web.FormView(this, this.dataset, false);
|
||||
if (this.options.alternative_form_view) {
|
||||
this.view_form.set_embedded_view(this.options.alternative_form_view);
|
||||
}
|
||||
this.view_form.start();
|
||||
this.view_form.appendTo(this.$element.find("#" + this.element_id + "_view_form"));
|
||||
this.view_form.on_loaded.add_last(function() {
|
||||
var $buttons = self.view_form.$element.find(".oe_form_buttons");
|
||||
$buttons.html(QWeb.render("SelectCreatePopup.form.buttons", {widget:self}));
|
||||
|
@ -2314,11 +2318,11 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp
|
|||
on_write_completed: function() {},
|
||||
setup_form_view: function() {
|
||||
var self = this;
|
||||
this.view_form = new openerp.web.FormView(this, this.element_id + "_view_form", this.dataset, false);
|
||||
this.view_form = new openerp.web.FormView(this, this.dataset, false);
|
||||
if (this.options.alternative_form_view) {
|
||||
this.view_form.set_embedded_view(this.options.alternative_form_view);
|
||||
}
|
||||
this.view_form.start();
|
||||
this.view_form.appendTo(this.$element.find("#" + this.element_id + "_view_form"));
|
||||
this.view_form.on_loaded.add_last(function() {
|
||||
var $buttons = self.view_form.$element.find(".oe_form_buttons");
|
||||
$buttons.html(QWeb.render("FormOpenPopup.form.buttons"));
|
||||
|
@ -2549,7 +2553,7 @@ openerp.web.form.FieldBinaryImage = openerp.web.form.FieldBinary.extend({
|
|||
});
|
||||
|
||||
openerp.web.form.FieldStatus = openerp.web.form.Field.extend({
|
||||
template: "FieldStatus",
|
||||
template: "EmptyComponent",
|
||||
start: function() {
|
||||
this._super();
|
||||
this.selected_value = null;
|
||||
|
|
|
@ -31,7 +31,6 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
|
|||
* @extends openerp.web.View
|
||||
*
|
||||
* @param parent parent object
|
||||
* @param element_id the id of the DOM elements this view should link itself to
|
||||
* @param {openerp.web.DataSet} dataset the dataset the view should work with
|
||||
* @param {String} view_id the listview's identifier, if any
|
||||
* @param {Object} options A set of options used to configure the view
|
||||
|
@ -42,9 +41,9 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
|
|||
* @param {Boolean} [options.sortable=true] is it possible to sort the table by clicking on column headers
|
||||
* @param {Boolean} [options.reorderable=true] is it possible to reorder list rows
|
||||
*/
|
||||
init: function(parent, element_id, dataset, view_id, options) {
|
||||
init: function(parent, dataset, view_id, options) {
|
||||
var self = this;
|
||||
this._super(parent, element_id);
|
||||
this._super(parent);
|
||||
this.set_default_options(_.extend({}, this.defaults, options || {}));
|
||||
this.dataset = dataset;
|
||||
this.model = dataset.model;
|
||||
|
@ -128,6 +127,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
|
|||
* @returns {$.Deferred} loading promise
|
||||
*/
|
||||
start: function() {
|
||||
this._super();
|
||||
this.$element.addClass('oe-listview');
|
||||
return this.reload_view(null, null, true);
|
||||
},
|
||||
|
|
|
@ -180,11 +180,11 @@ openerp.web.list_editable = function (openerp) {
|
|||
}
|
||||
self.edition = true;
|
||||
self.edition_id = record_id;
|
||||
self.edition_form = _.extend(new openerp.web.FormView(
|
||||
self, $new_row.attr('id'), self.dataset, false), {
|
||||
template: 'ListView.row.form',
|
||||
self.edition_form = _.extend(new openerp.web.ListEditableFormView(self, self.dataset, false), {
|
||||
form_template: 'ListView.row.form',
|
||||
registry: openerp.web.list.form.widgets
|
||||
});
|
||||
self.edition_form.appendTo($("#" + $new_row.attr('id')));
|
||||
$.when(self.edition_form.on_loaded(self.get_form_fields_view())).then(function () {
|
||||
// put in $.when just in case FormView.on_loaded becomes asynchronous
|
||||
$new_row.find('td')
|
||||
|
@ -333,4 +333,8 @@ openerp.web.list_editable = function (openerp) {
|
|||
});
|
||||
list_form_widgets.add(key, new_path);
|
||||
});
|
||||
|
||||
openerp.web.ListEditableFormView = openerp.web.FormView.extend({
|
||||
init_view: function() {}
|
||||
});
|
||||
};
|
||||
|
|
|
@ -19,13 +19,12 @@ openerp.web.TreeView = openerp.web.View.extend(/** @lends openerp.web.TreeView#
|
|||
* @extends openerp.web.View
|
||||
*
|
||||
* @param parent
|
||||
* @param element_id
|
||||
* @param dataset
|
||||
* @param view_id
|
||||
* @param options
|
||||
*/
|
||||
init: function(parent, element_id, dataset, view_id, options) {
|
||||
this._super(parent, element_id);
|
||||
init: function(parent, dataset, view_id, options) {
|
||||
this._super(parent);
|
||||
this.dataset = dataset;
|
||||
this.model = dataset.model;
|
||||
this.view_id = view_id;
|
||||
|
|
|
@ -133,11 +133,19 @@ db.web.ActionManager = db.web.Widget.extend({
|
|||
(this.client_widget = new ClientWidget(this, action.params)).appendTo(this);
|
||||
},
|
||||
ir_actions_report_xml: function(action) {
|
||||
var self = this;
|
||||
$.blockUI();
|
||||
this.session.get_file({
|
||||
url: '/web/report',
|
||||
data: {action: JSON.stringify(action)},
|
||||
complete: $.unblockUI
|
||||
self.rpc("/web/session/eval_domain_and_context", {
|
||||
contexts: [action.context],
|
||||
domains: []
|
||||
}).then(function(res) {
|
||||
action = _.clone(action);
|
||||
action.context = res.context;
|
||||
self.session.get_file({
|
||||
url: '/web/report',
|
||||
data: {action: JSON.stringify(action)},
|
||||
complete: $.unblockUI
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
|
@ -212,8 +220,7 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{
|
|||
if (!view.controller) {
|
||||
// Lazy loading of views
|
||||
var controllerclass = this.registry.get_object(view_type);
|
||||
var controller = new controllerclass(this, this.element_id + '_view_' + view_type,
|
||||
this.dataset, view.view_id, view.options);
|
||||
var controller = new controllerclass(this, this.dataset, view.view_id, view.options);
|
||||
if (view.embedded_view) {
|
||||
controller.set_embedded_view(view.embedded_view);
|
||||
}
|
||||
|
@ -232,7 +239,8 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{
|
|||
unique: true
|
||||
});
|
||||
}
|
||||
view_promise = controller.start();
|
||||
var container = $("#" + this.element_id + '_view_' + view_type);
|
||||
view_promise = controller.appendTo(container);
|
||||
$.when(view_promise).then(function() {
|
||||
self.on_controller_inited(view_type, controller);
|
||||
});
|
||||
|
@ -285,14 +293,14 @@ db.web.ViewManager = db.web.Widget.extend(/** @lends db.web.ViewManager# */{
|
|||
this.searchview.stop();
|
||||
}
|
||||
this.searchview = new db.web.SearchView(
|
||||
this, this.element_id + "_search", this.dataset,
|
||||
this, this.dataset,
|
||||
view_id, search_defaults);
|
||||
|
||||
this.searchview.on_search.add(function(domains, contexts, groupbys) {
|
||||
var controller = self.views[self.active_view].controller;
|
||||
controller.do_search.call(controller, domains, contexts, groupbys);
|
||||
});
|
||||
return this.searchview.start();
|
||||
return this.searchview.appendTo($("#" + this.element_id + "_search"));
|
||||
},
|
||||
/**
|
||||
* Called when one of the view want to execute an action
|
||||
|
@ -729,6 +737,7 @@ db.web.TranslateDialog = db.web.Dialog.extend({
|
|||
});
|
||||
|
||||
db.web.View = db.web.Widget.extend(/** @lends db.web.View# */{
|
||||
template: "EmptyComponent",
|
||||
set_default_options: function(options) {
|
||||
this.options = options || {};
|
||||
_.defaults(this.options, {
|
||||
|
|
|
@ -1412,9 +1412,6 @@
|
|||
</p>
|
||||
</div>
|
||||
</t>
|
||||
<t t-name="FieldStatus">
|
||||
<div t-att-id="widget.element_id"></div>
|
||||
</t>
|
||||
<t t-name="FieldStatus.content">
|
||||
<ul class="oe-arrow-list">
|
||||
<t t-set="size" t-value="widget.to_show.length"/>
|
||||
|
@ -1425,4 +1422,7 @@
|
|||
</t>
|
||||
</ul>
|
||||
</t>
|
||||
<t t-name="EmptyComponent">
|
||||
<div></div>
|
||||
</t>
|
||||
</templates>
|
||||
|
|
|
@ -8,8 +8,8 @@ QWeb.add_template('/web_calendar/static/src/xml/web_calendar.xml');
|
|||
openerp.web.views.add('calendar', 'openerp.web_calendar.CalendarView');
|
||||
openerp.web_calendar.CalendarView = openerp.web.View.extend({
|
||||
// Dhtmlx scheduler ?
|
||||
init: function(parent, element_id, dataset, view_id, options) {
|
||||
this._super(parent, element_id);
|
||||
init: function(parent, dataset, view_id, options) {
|
||||
this._super(parent);
|
||||
this.set_default_options(options);
|
||||
this.dataset = dataset;
|
||||
this.model = dataset.model;
|
||||
|
@ -30,6 +30,7 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
|
|||
this.color_map = {};
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type":"calendar", 'toolbar': true}, this.on_loaded);
|
||||
},
|
||||
stop: function() {
|
||||
|
@ -344,11 +345,11 @@ openerp.web_calendar.CalendarFormDialog = openerp.web.Dialog.extend({
|
|||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
this.form = new openerp.web.FormView(this, this.element_id, this.dataset, this.view_id, {
|
||||
this.form = new openerp.web.FormView(this, this.dataset, this.view_id, {
|
||||
sidebar: false,
|
||||
pager: false
|
||||
});
|
||||
this.form.start();
|
||||
this.form.appendTo(this.$element);
|
||||
this.form.on_created.add_last(this.on_form_dialog_saved);
|
||||
this.form.on_saved.add_last(this.on_form_dialog_saved);
|
||||
},
|
||||
|
|
|
@ -288,13 +288,14 @@ if (!openerp.web_dashboard) {
|
|||
}
|
||||
openerp.web_dashboard.ConfigOverview = openerp.web.View.extend({
|
||||
template: 'ConfigOverview',
|
||||
init: function (parent, element_id) {
|
||||
this._super(parent, element_id);
|
||||
init: function (parent) {
|
||||
this._super(parent);
|
||||
this.dataset = new openerp.web.DataSetSearch(
|
||||
this, 'ir.actions.todo');
|
||||
this.dataset.domain = [['type', '=', 'manual']];
|
||||
},
|
||||
start: function () {
|
||||
this._super();
|
||||
$.when(this.dataset.read_slice(['state', 'action_id', 'category_id']),
|
||||
this.dataset.call('progress'))
|
||||
.then(this.on_records_loaded);
|
||||
|
@ -352,6 +353,7 @@ openerp.web.client_actions.add(
|
|||
openerp.web_dashboard.ApplicationTiles = openerp.web.View.extend({
|
||||
template: 'ApplicationTiles',
|
||||
start: function () {
|
||||
this._super();
|
||||
var self = this;
|
||||
return new openerp.web.DataSetSearch(
|
||||
this, 'ir.ui.menu', null, [['parent_id', '=', false]])
|
||||
|
@ -393,6 +395,7 @@ openerp.web_dashboard.Widget = openerp.web.View.extend(/** @lends openerp.web_da
|
|||
this.widget_id = options.widget_id;
|
||||
},
|
||||
start: function () {
|
||||
this._super();
|
||||
return new openerp.web.DataSet(this, 'res.widget').read_ids(
|
||||
[this.widget_id], ['title'], this.on_widget_loaded);
|
||||
},
|
||||
|
|
|
@ -8,8 +8,8 @@ QWeb.add_template('/web_diagram/static/src/xml/base_diagram.xml');
|
|||
openerp.web.views.add('diagram', 'openerp.web.DiagramView');
|
||||
openerp.web.DiagramView = openerp.web.View.extend({
|
||||
searchable: false,
|
||||
init: function(parent, element_id, dataset, view_id, options) {
|
||||
this._super(parent, element_id);
|
||||
init: function(parent, dataset, view_id, options) {
|
||||
this._super(parent);
|
||||
this.set_default_options(options);
|
||||
this.view_manager = parent;
|
||||
this.dataset = dataset;
|
||||
|
@ -20,6 +20,7 @@ openerp.web.DiagramView = openerp.web.View.extend({
|
|||
this.ids = this.dataset.ids;
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
return this.rpc("/web_diagram/diagram/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
|
||||
},
|
||||
|
||||
|
|
|
@ -7,8 +7,8 @@ QWeb.add_template('/web_gantt/static/src/xml/web_gantt.xml');
|
|||
openerp.web.views.add('gantt', 'openerp.web_gantt.GanttView');
|
||||
openerp.web_gantt.GanttView = openerp.web.View.extend({
|
||||
|
||||
init: function(parent, element_id, dataset, view_id) {
|
||||
this._super(parent, element_id);
|
||||
init: function(parent, dataset, view_id) {
|
||||
this._super(parent);
|
||||
this.view_manager = parent || new openerp.web.NullViewManager();
|
||||
this.dataset = dataset;
|
||||
this.model = dataset.model;
|
||||
|
@ -32,6 +32,7 @@ init: function(parent, element_id, dataset, view_id) {
|
|||
},
|
||||
|
||||
start: function() {
|
||||
this._super();
|
||||
this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "gantt"}, this.on_loaded);
|
||||
},
|
||||
|
||||
|
|
|
@ -17,8 +17,8 @@ QWeb.add_template('/web_graph/static/src/xml/web_graph.xml');
|
|||
openerp.web.views.add('graph', 'openerp.web_graph.GraphView');
|
||||
openerp.web_graph.GraphView = openerp.web.View.extend({
|
||||
|
||||
init: function(parent, element_id, dataset, view_id) {
|
||||
this._super(parent, element_id);
|
||||
init: function(parent, dataset, view_id) {
|
||||
this._super(parent);
|
||||
this.view_manager = parent;
|
||||
this.dataset = dataset;
|
||||
this.dataset_index = 0;
|
||||
|
@ -33,6 +33,7 @@ openerp.web_graph.GraphView = openerp.web.View.extend({
|
|||
this.$element.hide();
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
return this.rpc("/web_graph/graphview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded);
|
||||
},
|
||||
on_loaded: function(data) {
|
||||
|
|
|
@ -4,8 +4,8 @@ var QWeb = openerp.web.qweb;
|
|||
QWeb.add_template('/web_kanban/static/src/xml/web_kanban.xml');
|
||||
openerp.web.views.add('kanban', 'openerp.web_kanban.KanbanView');
|
||||
openerp.web_kanban.KanbanView = openerp.web.View.extend({
|
||||
init: function (parent, element_id, dataset, view_id, options) {
|
||||
this._super(parent, element_id);
|
||||
init: function (parent, dataset, view_id, options) {
|
||||
this._super(parent);
|
||||
this.set_default_options(options);
|
||||
this.dataset = dataset;
|
||||
this.model = dataset.model;
|
||||
|
@ -26,6 +26,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
|
|||
}
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
return this.rpc("/web/view/load", {"model": this.model, "view_id": this.view_id, "view_type": "kanban"}, this.on_loaded);
|
||||
},
|
||||
on_loaded: function(data) {
|
||||
|
|
|
@ -131,9 +131,9 @@ openerp.web_mobile.Shortcuts = openerp.web.Widget.extend({
|
|||
id = $shortcut.data('menu');
|
||||
res_id = $shortcut.data('res');
|
||||
// this.header = new openerp.web_mobile.Header(this, "oe_header");
|
||||
this.listview = new openerp.web_mobile.ListView(this, "oe_list", res_id);
|
||||
this.listview = new openerp.web_mobile.ListView(this, res_id);
|
||||
// this.header.start();
|
||||
this.listview.start();
|
||||
this.listview.appendTo($("#oe_list"));
|
||||
jQuery("#oe_header").find("h1").html($shortcut.data('name'));
|
||||
}
|
||||
});
|
||||
|
@ -252,8 +252,8 @@ openerp.web_mobile.Secondary = openerp.web.Widget.extend({
|
|||
var $menu = $(ev.currentTarget);
|
||||
id = $menu.data('menu');
|
||||
if (id) {
|
||||
this.listview = new openerp.web_mobile.ListView(this, "oe_list", id);
|
||||
this.listview.start();
|
||||
this.listview = new openerp.web_mobile.ListView(this, id);
|
||||
this.listview.appendTo("#oe_list");
|
||||
}
|
||||
jQuery("#oe_header").find("h1").html($menu.data('name'));
|
||||
}
|
||||
|
|
|
@ -37,6 +37,9 @@ optparser.add_option("--log-level", dest="log_level",
|
|||
default='debug', help="Log level", metavar="LOG_LEVEL")
|
||||
optparser.add_option("--log-config", dest="log_config",
|
||||
default='', help="Log config file", metavar="LOG_CONFIG")
|
||||
optparser.add_option('--multi-threaded', dest='threaded',
|
||||
default=False, action='store_true',
|
||||
help="Use multiple threads to handle requests")
|
||||
|
||||
import web.common.dispatch
|
||||
|
||||
|
@ -55,5 +58,5 @@ if __name__ == "__main__":
|
|||
|
||||
werkzeug.serving.run_simple(
|
||||
'0.0.0.0', options.socket_port, app,
|
||||
use_reloader=options.reloader, threaded=True)
|
||||
use_reloader=options.reloader, threaded=options.threaded)
|
||||
|
||||
|
|
Loading…
Reference in New Issue