Antony Lesuisse 2012-04-06 16:05:37 +02:00
commit eac3ebb87e
8 changed files with 82 additions and 109 deletions

View File

@ -875,13 +875,13 @@ class Menu(openerpweb.Controller):
context = req.session.eval_context(req.context)
Menus = req.session.model('ir.ui.menu')
menu_roots = Menus.read(self.do_get_user_roots(req), ['name', 'sequence', 'parent_id', 'action'], context)
menu_roots = Menus.read(self.do_get_user_roots(req), ['name', 'sequence', 'parent_id', 'action', 'needaction_enabled', 'needaction_counter'], context)
menu_root = {'id': False, 'name': 'root', 'parent_id': [-1, ''], 'children' : menu_roots}
# menus are loaded fully unlike a regular tree view, cause there are a
# limited number of items (752 when all 6.1 addons are installed)
menu_ids = Menus.search([], 0, False, False, context)
menu_items = Menus.read(menu_ids, ['name', 'sequence', 'parent_id', 'action'], context)
menu_items = Menus.read(menu_ids, ['name', 'sequence', 'parent_id', 'action', 'needaction_enabled', 'needaction_counter'], context)
# adds roots at the end of the sequence, so that they will overwrite
# equivalent menu items from full menu read when put into id:item
# mapping, resulting in children being correctly set on the roots.

View File

@ -479,6 +479,19 @@
-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.2);
}
.openerp2 .oe_secondary_submenu .oe_menu_counter {
float: right;
background: #8a89ba;
color: #eeeeee;
font-size: 12px;
border: 1px solid lightgray;
padding: 0px 4px 0px 4px;
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
margin: 0px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
border-radius: 4px;
}
.openerp2 .oe_secondary_submenu .oe_active {
background: #8a89ba;
border-top: 1px solid lightGray;
@ -499,6 +512,10 @@
-webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.2);
}
.openerp2 .oe_secondary_submenu .oe_active .oe_menu_counter {
background: #eeeeee;
color: #8a89ba;
}
.openerp2 .oe_secondary_submenu .oe_menu_toggler:before {
width: 0;
height: 0;

View File

@ -401,6 +401,16 @@ $colour4: #8a89ba
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
@include radius(4px)
@include box-shadow(inset 0 1px 1px rgba(0, 0, 0, 0.2))
.oe_menu_counter
float: right
background: #8a89ba
color: #eee
font-size: 12px
border: 1px solid lightgray
padding: 0px 4px 0px 4px
text-shadow: 0 1px 1px rgba(0,0,0,0.2)
margin: 0px
@include radius(4px)
.oe_active
background: $colour4
border-top: 1px solid lightGray
@ -414,6 +424,9 @@ $colour4: #8a89ba
color: $colour4
text-shadow: 0 1px 1px white
@include box-shadow(0 1px 1px rgba(0, 0, 0, 0.2))
.oe_menu_counter
background: #eee
color: #8a89ba
.oe_menu_toggler:before
width: 0
height: 0

View File

@ -1258,45 +1258,6 @@ label.error {
text-decoration: underline;
color: inherit;
}
.openerp .oe-view-manager-logs {
clear: both;
background: #fff;
margin: 0.25em 0;
font-size: 85%;
color: #4C4C4C;
position: relative;
overflow: hidden;
}
.openerp .oe-view-manager-logs ul {
margin: 0;
padding: 0 10px;
list-style: none;
}
.openerp .oe-view-manager-logs li:before {
content: '\2192 ';
}
.openerp .oe-view-manager-logs a {
text-decoration: none;
color: inherit;
}
/* only display first three log items of a folded logs list */
.openerp .oe-view-manager-logs.oe-folded li:nth-child(n+4) {
display: none;
}
/* display link to more logs if there are more logs to view and the logview is
currently folded */
.openerp .oe-view-manager-logs a.oe-more-logs {
display: none;
}
.openerp .oe-view-manager-logs.oe-folded.oe-has-more a.oe-more-logs {
display: block;
}
.openerp .oe-view-manager-logs a.oe-remove-everything {
position: absolute;
top: 0;
right: 0;
cursor: pointer;
}
.openerp .view-manager-main-sidebar {
width: 180px;

View File

@ -2502,6 +2502,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.AbstractField.extend({
disable_utility_classes: true,
init: function(view, node) {
this._super(view, node);
lazy_build_o2m_kanban_view();
this.is_loaded = $.Deferred();
this.initial_is_loaded = this.is_loaded;
this.is_setted = $.Deferred();
@ -2579,7 +2580,8 @@ openerp.web.form.FieldOne2Many = openerp.web.form.AbstractField.extend({
this.viewmanager.registry = openerp.web.views.extend({
list: 'openerp.web.form.One2ManyListView',
form: 'openerp.web.form.One2ManyFormView',
page: 'openerp.web.PageView'
page: 'openerp.web.PageView',
kanban: 'openerp.web.form.One2ManyKanbanView',
});
var once = $.Deferred().then(function() {
self.init_form_last_update.resolve();
@ -2588,8 +2590,8 @@ openerp.web.form.FieldOne2Many = openerp.web.form.AbstractField.extend({
self.initial_is_loaded.resolve();
});
this.viewmanager.on_controller_inited.add_last(function(view_type, controller) {
controller.o2m = self;
if (view_type == "list") {
controller.o2m = self;
if (self.get("effective_readonly"))
controller.set_editable(false);
} else if (view_type == "form" || view_type == 'page') {
@ -2636,7 +2638,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.AbstractField.extend({
};
self.form_last_update = self.form_last_update.pipe(act, act);
return self.form_last_update;
} else if (active_view === "graph") {
} else if (view.do_search) {
return view.do_search(self.build_domain(), self.dataset.get_context(), []);
}
}, undefined);
@ -2862,6 +2864,35 @@ openerp.web.form.One2ManyFormView = openerp.web.FormView.extend({
}
});
var lazy_build_o2m_kanban_view = function() {
if (! openerp.web_kanban || openerp.web.form.One2ManyKanbanView)
return;
openerp.web.form.One2ManyKanbanView = openerp.web_kanban.KanbanView.extend({
open_record: function(id) {
var self = this;
var pop = new openerp.web.form.FormOpenPopup(self.o2m.view);
pop.show_element(self.o2m.field.relation, id, self.o2m.build_context(), {
title: _t("Open: ") + self.name,
auto_write: false,
alternative_form_view: self.o2m.field.views ? self.o2m.field.views["form"] : undefined,
parent_view: self.o2m.view,
child_name: self.o2m.name,
read_function: function() {
return self.o2m.dataset.read_ids.apply(self.o2m.dataset, arguments);
},
form_view_options: {'not_interactible_on_create':true},
readonly: self.o2m.get("effective_readonly"),
});
pop.on_write.add(function(id, data) {
self.o2m.dataset.write(id, data, {}, function(r) {
self.o2m.reload_current_view();
});
});
},
});
}
/*
* TODO niv: clean those deferred stuff, it could be better
*/

View File

@ -548,17 +548,6 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
}
}
var $res_logs = this.$element.find('.oe-view-manager-logs:first');
$res_logs.delegate('a.oe-more-logs', 'click', function () {
$res_logs.removeClass('oe-folded');
return false;
}).delegate('a.oe-remove-everything', 'click', function () {
$res_logs.removeClass('oe-has-more').find('ul').empty();
$res_logs.css('display','none');
return false;
});
$res_logs.css('display','none');
return manager_ready;
},
on_debug_changed: function (evt) {
@ -662,8 +651,6 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
return $.when(this._super(view_type, no_store)).then(function () {
self.shortcut_check(self.views[view_type]);
self.$element.find('.oe-view-manager-logs:first').addClass('oe-folded').removeClass('oe-has-more').css('display','none').find('ul').empty();
var controller = self.views[self.active_view].controller,
fvg = controller.fields_view,
view_id = (fvg && fvg.view_id) || '--';
@ -745,43 +732,6 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
}
});
},
/**
* Intercept do_action resolution from children views
*/
on_action_executed: function () {
return new session.web.DataSet(this, 'res.log')
.call('get', [], this.do_display_log);
},
/**
* @param {Array<Object>} log_records
*/
do_display_log: function (log_records) {
var self = this;
var cutoff = 3;
var $logs = this.$element.find('.oe-view-manager-logs:first').addClass('oe-folded').css('display', 'block');
var $logs_list = $logs.find('ul').empty();
$logs.toggleClass('oe-has-more', log_records.length > cutoff);
_(log_records.reverse()).each(function (record) {
var context = {};
if (record.context) {
try { context = py.eval(record.context); }
catch (e) { /* TODO: what do I do now? */ }
}
$(_.str.sprintf('<li><a href="#">%s</a></li>', record.name))
.appendTo($logs_list)
.delegate('a', 'click', function () {
self.do_action({
type: 'ir.actions.act_window',
res_model: record.res_model,
res_id: record.res_id,
// TODO: need to have an evaluated context here somehow
context: context,
views: [[context.view_id || false, 'form']]
});
return false;
});
});
},
display_title: function () {
return this.action.name;
}
@ -1093,10 +1043,10 @@ session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
},
load_view: function() {
if (this.embedded_view) {
var def = $.Deferred().pipe(this.on_loaded);
var def = $.Deferred();
var self = this;
$.async_when().then(function() {def.resolve(self.embedded_view);});
return def.promise();
return def.pipe(this.on_loaded);
} else {
var context = new session.web.CompoundContext(this.dataset.get_context());
if (! this.view_type)

View File

@ -373,6 +373,11 @@
t-att-data-action-model="menu.action ? menu.action.split(',')[0] : ''"
t-att-data-action-id="menu.action ? menu.action.split(',')[1] : ''">
<t t-esc="menu.name"/>
<t t-if="menu.needaction_enabled">
<div class="oe_menu_counter">
<t t-esc="menu.needaction_counter"/>
</div>
</t>
</a>
</t>
@ -457,13 +462,6 @@
<t t-jquery="h2.oe_view_title" t-operation="after">
<select t-if="self.session.debug" class="oe_debug_view"/>
</t>
<t t-jquery=".oe-view-manager-header" t-operation="after">
<div class="oe-view-manager-logs oe-folded">
<ul></ul>
<a class="oe-more-logs" href="#">More…</a>
<a class="oe-remove-everything ui-icon ui-icon-closethick"/>
</div>
</t>
</t>
<t t-name="ViewManagerDebug">
<option value="">Debug View#<t t-esc="view.fields_view.view_id"/></option>

View File

@ -250,7 +250,14 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
do_show: function() {
this.do_push_state({});
return this._super();
}
},
open_record: function(id) {
if (this.dataset.select_id(id)) {
this.do_switch_view('form');
} else {
this.do_warn("Kanban: could not find id#" + id);
}
},
});
openerp.web_kanban.KanbanGroup = openerp.web.OldWidget.extend({
@ -473,11 +480,7 @@ openerp.web_kanban.KanbanRecord = openerp.web.OldWidget.extend({
self.view.form_dialog.open();
});
} else {
if (self.view.dataset.select_id(this.id)) {
this.view.do_switch_view('form');
} else {
this.do_warn("Kanban: could not find id#" + id);
}
this.view.open_record(this.id);
}
},
do_action_color: function($action) {