[MERGE] Merge with trunk upto revision no 1447.
bzr revid: ysa@tinyerp.com-20111111050405-6gpraiqv7iw27n13
This commit is contained in:
commit
808253669f
|
@ -1417,6 +1417,7 @@ class ExcelExport(Export):
|
|||
for cell_index, cell_value in enumerate(row):
|
||||
if isinstance(cell_value, basestring):
|
||||
cell_value = re.sub("\r", " ", cell_value)
|
||||
if cell_value is False: cell_value = None
|
||||
worksheet.write(row_index + 1, cell_index, cell_value, style)
|
||||
|
||||
fp = StringIO()
|
||||
|
|
|
@ -887,8 +887,11 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
|||
*/
|
||||
render_element: function() {
|
||||
var rendered = this.render();
|
||||
if (rendered || rendered === "")
|
||||
this.$element = $(rendered);
|
||||
if (rendered) {
|
||||
var elem = $(rendered);
|
||||
this.$element.replaceWith(elem);
|
||||
this.$element = elem;
|
||||
}
|
||||
return this;
|
||||
},
|
||||
/**
|
||||
|
@ -900,7 +903,7 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
|||
render: function (additional) {
|
||||
if (this.template)
|
||||
return openerp.web.qweb.render(this.template, _.extend({widget: this}, additional || {}));
|
||||
return false;
|
||||
return null;
|
||||
},
|
||||
/**
|
||||
* Method called after rendering. Mostly used to bind actions, perform asynchronous
|
||||
|
@ -912,12 +915,6 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
|
|||
* @returns {jQuery.Deferred}
|
||||
*/
|
||||
start: function() {
|
||||
/* The default implementation is only useful for retro-compatibility, it is
|
||||
not necessary to call it using _super() when using Widget for new components. */
|
||||
if (!this.$element) {
|
||||
var tmp = document.getElementById(this.element_id);
|
||||
this.$element = tmp ? $(tmp) : undefined;
|
||||
}
|
||||
return $.Deferred().done().promise();
|
||||
},
|
||||
/**
|
||||
|
|
|
@ -18,11 +18,11 @@ openerp.web.str_to_datetime = function(str) {
|
|||
var regex = /^(\d\d\d\d-\d\d-\d\d \d\d:\d\d:\d\d)(?:\.\d+)?$/;
|
||||
var res = regex.exec(str);
|
||||
if ( !res ) {
|
||||
throw "'" + str + "' is not a valid datetime";
|
||||
throw new Error("'" + str + "' is not a valid datetime");
|
||||
}
|
||||
var obj = Date.parse(res[1] + " GMT");
|
||||
if (! obj) {
|
||||
throw "'" + str + "' is not a valid datetime";
|
||||
throw new Error("'" + str + "' is not a valid datetime");
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
@ -41,11 +41,11 @@ openerp.web.str_to_date = function(str) {
|
|||
var regex = /^\d\d\d\d-\d\d-\d\d$/;
|
||||
var res = regex.exec(str);
|
||||
if ( !res ) {
|
||||
throw "'" + str + "' is not a valid date";
|
||||
throw new Error("'" + str + "' is not a valid date");
|
||||
}
|
||||
var obj = Date.parse(str);
|
||||
if (! obj) {
|
||||
throw "'" + str + "' is not a valid date";
|
||||
throw new Error("'" + str + "' is not a valid date");
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
@ -64,11 +64,11 @@ openerp.web.str_to_time = function(str) {
|
|||
var regex = /^(\d\d:\d\d:\d\d)(?:\.\d+)?$/;
|
||||
var res = regex.exec(str);
|
||||
if ( !res ) {
|
||||
throw "'" + str + "' is not a valid time";
|
||||
throw new Error("'" + str + "' is not a valid time");
|
||||
}
|
||||
var obj = Date.parse(res[1]);
|
||||
if (! obj) {
|
||||
throw "'" + str + "' is not a valid time";
|
||||
throw new Error("'" + str + "' is not a valid time");
|
||||
}
|
||||
return obj;
|
||||
};
|
||||
|
|
|
@ -93,7 +93,7 @@ openerp.web.parse_value = function (value, descriptor, value_if_empty) {
|
|||
} while(tmp !== value);
|
||||
tmp = Number(value);
|
||||
if (isNaN(tmp))
|
||||
throw value + " is not a correct integer";
|
||||
throw new Error(value + " is not a correct integer");
|
||||
return tmp;
|
||||
case 'float':
|
||||
var tmp = Number(value);
|
||||
|
@ -107,42 +107,42 @@ openerp.web.parse_value = function (value, descriptor, value_if_empty) {
|
|||
} while(tmp !== tmp2);
|
||||
tmp = Number(tmp);
|
||||
if (isNaN(tmp))
|
||||
throw value + " is not a correct float";
|
||||
throw new Error(value + " is not a correct float");
|
||||
return tmp;
|
||||
case 'float_time':
|
||||
var tmp = value.split(":");
|
||||
if (tmp.length != 2)
|
||||
throw value + " is not a correct float_time";
|
||||
var tmp1 = openerp.web.parse_value(tmp[0], {type: "integer"});
|
||||
var tmp2 = openerp.web.parse_value(tmp[1], {type: "integer"});
|
||||
return tmp1 + (tmp2 / 60);
|
||||
var float_time_pair = value.split(":");
|
||||
if (float_time_pair.length != 2)
|
||||
return openerp.web.parse_value(value, {type: "float"});
|
||||
var hours = openerp.web.parse_value(float_time_pair[0], {type: "integer"});
|
||||
var minutes = openerp.web.parse_value(float_time_pair[1], {type: "integer"});
|
||||
return hours + (minutes / 60);
|
||||
case 'progressbar':
|
||||
return openerp.web.parse_value(value, {type: "float"});
|
||||
case 'datetime':
|
||||
var tmp = Date.parseExact(value, _.sprintf("%s %s", Date.CultureInfo.formatPatterns.shortDate,
|
||||
Date.CultureInfo.formatPatterns.longTime));
|
||||
if (tmp !== null)
|
||||
return openerp.web.datetime_to_str(tmp);
|
||||
tmp = Date.parse(value);
|
||||
if (tmp !== null)
|
||||
return openerp.web.datetime_to_str(tmp);
|
||||
throw value + " is not a valid datetime";
|
||||
var datetime = Date.parseExact(value, _.sprintf("%s %s", Date.CultureInfo.formatPatterns.shortDate,
|
||||
Date.CultureInfo.formatPatterns.longTime));
|
||||
if (datetime !== null)
|
||||
return openerp.web.datetime_to_str(datetime);
|
||||
datetime = Date.parse(value);
|
||||
if (datetime !== null)
|
||||
return openerp.web.datetime_to_str(datetime);
|
||||
throw new Error(value + " is not a valid datetime");
|
||||
case 'date':
|
||||
var tmp = Date.parseExact(value, Date.CultureInfo.formatPatterns.shortDate);
|
||||
if (tmp !== null)
|
||||
return openerp.web.date_to_str(tmp);
|
||||
tmp = Date.parse(value);
|
||||
if (tmp !== null)
|
||||
return openerp.web.date_to_str(tmp);
|
||||
throw value + " is not a valid date";
|
||||
var date = Date.parseExact(value, Date.CultureInfo.formatPatterns.shortDate);
|
||||
if (date !== null)
|
||||
return openerp.web.date_to_str(date);
|
||||
date = Date.parse(value);
|
||||
if (date !== null)
|
||||
return openerp.web.date_to_str(date);
|
||||
throw new Error(value + " is not a valid date");
|
||||
case 'time':
|
||||
var tmp = Date.parseExact(value, Date.CultureInfo.formatPatterns.longTime);
|
||||
if (tmp !== null)
|
||||
return openerp.web.time_to_str(tmp);
|
||||
tmp = Date.parse(value);
|
||||
if (tmp !== null)
|
||||
return openerp.web.time_to_str(tmp);
|
||||
throw value + " is not a valid time";
|
||||
var time = Date.parseExact(value, Date.CultureInfo.formatPatterns.longTime);
|
||||
if (time !== null)
|
||||
return openerp.web.time_to_str(time);
|
||||
time = Date.parse(value);
|
||||
if (time !== null)
|
||||
return openerp.web.time_to_str(time);
|
||||
throw new Error(value + " is not a valid time");
|
||||
}
|
||||
return value;
|
||||
};
|
||||
|
@ -157,7 +157,7 @@ openerp.web.auto_str_to_date = function(value, type) {
|
|||
try {
|
||||
return openerp.web.str_to_time(value);
|
||||
} catch(e) {}
|
||||
throw "'" + value + "' is not a valid date, datetime nor time"
|
||||
throw new Error("'" + value + "' is not a valid date, datetime nor time");
|
||||
};
|
||||
|
||||
openerp.web.auto_date_to_str = function(value, type) {
|
||||
|
@ -169,7 +169,7 @@ openerp.web.auto_date_to_str = function(value, type) {
|
|||
case 'time':
|
||||
return openerp.web.time_to_str(value);
|
||||
default:
|
||||
throw type + " is not convertible to date, datetime nor time"
|
||||
throw new Error(type + " is not convertible to date, datetime nor time");
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -963,10 +963,7 @@ openerp.web.search.ExtendedSearch = openerp.web.OldWidget.extend({
|
|||
this.check_last_element();
|
||||
},
|
||||
start: function () {
|
||||
this._super();
|
||||
if (!this.$element) {
|
||||
return; // not a logical state but sometimes it happens
|
||||
}
|
||||
this.$element = $("#" + this.element_id);
|
||||
this.$element.closest("table.oe-searchview-render-line").css("display", "none");
|
||||
var self = this;
|
||||
this.rpc("/web/searchview/fields_get",
|
||||
|
@ -1028,7 +1025,7 @@ openerp.web.search.ExtendedSearchGroup = openerp.web.OldWidget.extend({
|
|||
prop.start();
|
||||
},
|
||||
start: function () {
|
||||
this._super();
|
||||
this.$element = $("#" + this.element_id);
|
||||
var _this = this;
|
||||
this.add_prop();
|
||||
this.$element.find('.searchview_extended_add_proposition').click(function () {
|
||||
|
@ -1080,7 +1077,7 @@ openerp.web.search.ExtendedSearchProposition = openerp.web.OldWidget.extend(/**
|
|||
this.value = null;
|
||||
},
|
||||
start: function () {
|
||||
this._super();
|
||||
this.$element = $("#" + this.element_id);
|
||||
this.select_field(this.fields.length > 0 ? this.fields[0] : null);
|
||||
var _this = this;
|
||||
this.$element.find(".searchview_extended_prop_field").change(function() {
|
||||
|
@ -1188,7 +1185,7 @@ openerp.web.search.ExtendedSearchProposition.DateTime = openerp.web.OldWidget.ex
|
|||
return this.datewidget.get_value();
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
this.$element = $("#" + this.element_id);
|
||||
this.datewidget = new openerp.web.DateTimeWidget(this);
|
||||
this.datewidget.prependTo(this.$element);
|
||||
}
|
||||
|
@ -1208,7 +1205,7 @@ openerp.web.search.ExtendedSearchProposition.Date = openerp.web.OldWidget.extend
|
|||
return this.datewidget.get_value();
|
||||
},
|
||||
start: function() {
|
||||
this._super();
|
||||
this.$element = $("#" + this.element_id);
|
||||
this.datewidget = new openerp.web.DateWidget(this);
|
||||
this.datewidget.prependTo(this.$element);
|
||||
}
|
||||
|
|
|
@ -387,10 +387,16 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
|
|||
var def = $.Deferred();
|
||||
$.when(this.has_been_loaded).then(function() {
|
||||
if (self.can_be_discarded() && self.datarecord.id) {
|
||||
self.dataset.unlink([self.datarecord.id]).then(function() {
|
||||
self.on_pager_action('next');
|
||||
def.resolve();
|
||||
});
|
||||
if (confirm(_t("Do you really want to delete this record?"))) {
|
||||
self.dataset.unlink([self.datarecord.id]).then(function() {
|
||||
self.on_pager_action('next');
|
||||
def.resolve();
|
||||
});
|
||||
} else {
|
||||
setTimeout(function () {
|
||||
def.reject();
|
||||
}, 0)
|
||||
}
|
||||
}
|
||||
});
|
||||
return def.promise();
|
||||
|
@ -2035,7 +2041,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
|
|||
once.resolve();
|
||||
});
|
||||
controller.on_pager_action.add_first(function() {
|
||||
self.save_form_view();
|
||||
self.save_any_view();
|
||||
});
|
||||
controller.$element.find(".oe_form_button_save").hide();
|
||||
} else if (view_type == "graph") {
|
||||
|
@ -2044,7 +2050,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
|
|||
def.resolve();
|
||||
});
|
||||
this.viewmanager.on_mode_switch.add_first(function(n_mode, b, c, d, e) {
|
||||
$.when(self.save_form_view()).then(function() {
|
||||
$.when(self.save_any_view()).then(function() {
|
||||
if(n_mode === "list")
|
||||
setTimeout(function() {self.reload_current_view();}, 0);
|
||||
});
|
||||
|
@ -2154,7 +2160,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
|
|||
this.dataset.to_delete, function(x) {
|
||||
return commands['delete'](x.id);}));
|
||||
},
|
||||
save_form_view: function() {
|
||||
save_any_view: function() {
|
||||
if (this.viewmanager && this.viewmanager.views && this.viewmanager.active_view &&
|
||||
this.viewmanager.views[this.viewmanager.active_view] &&
|
||||
this.viewmanager.views[this.viewmanager.active_view].controller) {
|
||||
|
@ -2166,6 +2172,13 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
|
|||
console.warn("Asynchronous get_value() is not supported in form view.");
|
||||
}*/
|
||||
return res;
|
||||
} else if (this.viewmanager.active_view === "list") {
|
||||
var res = $.when(view.ensure_saved());
|
||||
// it seems line there are some cases when this happens
|
||||
/*if (!res.isResolved() && !res.isRejected()) {
|
||||
console.warn("Asynchronous get_value() is not supported in list view.");
|
||||
}*/
|
||||
return res;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
|
@ -2190,7 +2203,7 @@ openerp.web.form.FieldOne2Many = openerp.web.form.Field.extend({
|
|||
}
|
||||
},
|
||||
is_dirty: function() {
|
||||
this.save_form_view();
|
||||
this.save_any_view();
|
||||
return this._super();
|
||||
},
|
||||
update_dom: function() {
|
||||
|
@ -2318,6 +2331,10 @@ openerp.web.form.FieldMany2Many = openerp.web.form.Field.extend({
|
|||
'deletable': self.is_readonly() ? false : true,
|
||||
'selectable': self.multi_selection
|
||||
});
|
||||
var embedded = (this.field.views || {}).tree;
|
||||
if (embedded) {
|
||||
this.list_view.set_embedded_view(embedded);
|
||||
}
|
||||
this.list_view.m2m_field = this;
|
||||
var loaded = $.Deferred();
|
||||
this.list_view.on_loaded.add_last(function() {
|
||||
|
@ -2419,7 +2436,8 @@ openerp.web.form.SelectCreatePopup = openerp.web.OldWidget.extend(/** @lends ope
|
|||
}, read_function: null});
|
||||
this.initial_ids = this.options.initial_ids;
|
||||
this.created_elements = [];
|
||||
openerp.web.form.dialog(this.render(), {close:function() {
|
||||
this.render_element();
|
||||
openerp.web.form.dialog(this.$element, {close:function() {
|
||||
self.check_exit();
|
||||
}});
|
||||
this.start();
|
||||
|
@ -2607,7 +2625,8 @@ openerp.web.form.FormOpenPopup = openerp.web.OldWidget.extend(/** @lends openerp
|
|||
this.row_id = row_id;
|
||||
this.context = context || {};
|
||||
this.options = _.defaults(options || {}, {"auto_write": true});
|
||||
jQuery(this.render()).dialog({title: '',
|
||||
this.render_element();
|
||||
this.$element.dialog({title: '',
|
||||
modal: true,
|
||||
width: 960,
|
||||
height: 600});
|
||||
|
@ -3013,7 +3032,7 @@ openerp.web.form.FieldSelectionReadonly = openerp.web.form.FieldReadonly.extend(
|
|||
this.$element.find('div').text(option ? option[1] : this.values[0][1]);
|
||||
}
|
||||
});
|
||||
openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.extend({
|
||||
openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldURIReadonly.extend({
|
||||
set_value: function (value) {
|
||||
value = value || null;
|
||||
this.invalid = false;
|
||||
|
@ -3023,24 +3042,39 @@ openerp.web.form.FieldMany2OneReadonly = openerp.web.form.FieldCharReadonly.exte
|
|||
self.on_value_changed();
|
||||
var real_set_value = function(rval) {
|
||||
self.value = rval;
|
||||
var div = $(self.$element.find('div'));
|
||||
div.html('<a href="javascript:void(0)"></a>');
|
||||
var a = $(div.find("a"));
|
||||
a.text(rval ? rval[1] : '');
|
||||
a.click(function() {
|
||||
var pop = new openerp.web.form.FormOpenPopup(self.view);
|
||||
pop.show_element(self.field.relation, self.value[0],self.build_context(), {readonly:true});
|
||||
});
|
||||
self.$element.find('a')
|
||||
.unbind('click')
|
||||
.text(rval ? rval[1] : '')
|
||||
.click(function () {
|
||||
self.do_action({
|
||||
type: 'ir.actions.act_window',
|
||||
res_model: self.field.relation,
|
||||
res_id: self.value[0],
|
||||
context: self.build_context(),
|
||||
views: [[false, 'form']],
|
||||
target: 'current'
|
||||
});
|
||||
return false;
|
||||
});
|
||||
};
|
||||
if (value && !(value instanceof Array)) {
|
||||
var dataset = new openerp.web.DataSetStatic(
|
||||
this, this.field.relation, self.build_context());
|
||||
dataset.name_get([value], function(data) {
|
||||
real_set_value(data[0]);
|
||||
}).fail(function() {self.tmp_value = undefined;});
|
||||
new openerp.web.DataSetStatic(
|
||||
this, this.field.relation, self.build_context())
|
||||
.name_get([value], function(data) {
|
||||
real_set_value(data[0]);
|
||||
});
|
||||
} else {
|
||||
setTimeout(function() {real_set_value(value);}, 0);
|
||||
}
|
||||
},
|
||||
get_value: function() {
|
||||
if (!this.value) {
|
||||
return false;
|
||||
} else if (this.value instanceof Array) {
|
||||
return this.value[0];
|
||||
} else {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -476,7 +476,7 @@ openerp.web.ListView = openerp.web.View.extend( /** @lends openerp.web.ListView#
|
|||
* @param {Array} ids the ids of the records to delete
|
||||
*/
|
||||
do_delete: function (ids) {
|
||||
if (!(ids.length && confirm(_t("Are you sure to remove those records ?")))) {
|
||||
if (!(ids.length && confirm(_t("Do you really want to remove these records?")))) {
|
||||
return;
|
||||
}
|
||||
var self = this;
|
||||
|
@ -1145,9 +1145,12 @@ openerp.web.ListView.Groups = openerp.web.Class.extend( /** @lends openerp.web.L
|
|||
row_data[group.grouped_on] = group;
|
||||
var group_column = _(self.columns).detect(function (column) {
|
||||
return column.id === group.grouped_on; });
|
||||
$group_column.html(openerp.web.format_cell(
|
||||
row_data, group_column, _t("Undefined")
|
||||
));
|
||||
try {
|
||||
$group_column.html(openerp.web.format_cell(
|
||||
row_data, group_column, _t("Undefined")));
|
||||
} catch (e) {
|
||||
$group_column.html(row_data[group_column.id].value);
|
||||
}
|
||||
if (group.openable) {
|
||||
// Make openable if not terminal group & group_by_no_leaf
|
||||
$group_column
|
||||
|
|
|
@ -471,7 +471,7 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
|
|||
$search_prefix = $title.find('span');
|
||||
if (controller.searchable !== false) {
|
||||
if (!$search_prefix.length) {
|
||||
$title.prepend('<span>' + _t("Search:") + '</span>');
|
||||
$title.prepend('<span>' + _t("Search: ") + '</span>');
|
||||
}
|
||||
} else {
|
||||
$search_prefix.remove();
|
||||
|
|
|
@ -373,9 +373,8 @@ openerp.web_graph.GraphView = openerp.web.View.extend({
|
|||
},
|
||||
open_list_view : function (id){
|
||||
var self = this;
|
||||
if($(".dhx_tooltip").is(":visible")) {
|
||||
$(".dhx_tooltip").remove('div');
|
||||
}
|
||||
// unconditionally nuke tooltips before switching view
|
||||
$(".dhx_tooltip").remove('div');
|
||||
id = id[this.abscissa];
|
||||
if (typeof id == 'object'){
|
||||
id = id[0];
|
||||
|
|
|
@ -20,13 +20,10 @@ openerp.web_mobile.MobileWebClient = openerp.web.Widget.extend({
|
|||
openerp.web.qweb.add_template("xml/web_mobile.xml");
|
||||
var params = {};
|
||||
this.$element.html(this.render());
|
||||
this.session = new openerp.web.Session("oe_errors");
|
||||
this.crashmanager = new openerp.web.CrashManager(this);
|
||||
this.login = new openerp.web_mobile.Login(this, "oe_login");
|
||||
// this.session.on_session_invalid.add(this.login.do_ask_login);
|
||||
},
|
||||
start: function() {
|
||||
this.session.start();
|
||||
this.login.start();
|
||||
}
|
||||
});
|
||||
|
|
|
@ -96,10 +96,6 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(notebook){
|
||||
$(this).find('div#page_content').html(self.render({'get_fields': get_fields,'fields' : result.fields, 'values' : self.datarecord,'til': notebook.attrs.string }));
|
||||
}else{
|
||||
$(this).find('div#page_content').html(self.render({'get_fields': get_fields,'fields' : result.fields, 'values' : self.datarecord}));
|
||||
}
|
||||
self.formatdata(get_fields, fields, result, self.datarecord,'page_content','element');
|
||||
|
@ -135,16 +131,19 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
var relational = $(this).attr('for');
|
||||
if(result.fields[relational]){
|
||||
var head = $.trim($(this).text());
|
||||
var dataset = new openerp.web.DataSetStatic(self, result.fields[relational].relation, result.fields[relational].context);
|
||||
var dataset = new openerp.web.DataSetSearch(self, result.fields[relational].relation, result.fields[relational].context);
|
||||
dataset.domain=[['id', 'in', self.datarecord[relational]]];
|
||||
dataset.name_search('', dataset.domain, 'in',false ,function(res){
|
||||
for(var i=0;i<res.length;i++){
|
||||
var splited_data = res[i][1].split(',');
|
||||
res[i][1] = splited_data[0];
|
||||
dataset.read_slice([], {}, function(result1,ids){
|
||||
_.extend(self.action.context,{"html_name_get" : true});
|
||||
var dataset1 = new openerp.web.DataSet(self, result.fields[relational].relation,result.fields[relational].context);
|
||||
dataset1.name_get(dataset.ids,function(res){
|
||||
var additional = "";
|
||||
if(res['html_name_get']){
|
||||
additional = res['display'];
|
||||
}
|
||||
if(!$('[id^="oe_list_'+relational+'_'+self.element_id+'"]').html()){
|
||||
$('<div id="oe_list_'+relational+'_'+self.element_id+'" data-role="page" data-url="oe_list_'+relational+'_'+self.element_id+'"> </div>').appendTo('#moe');
|
||||
$('[id^="oe_list_'+relational+'_'+self.element_id+'"]').html(openerp.web.qweb.render("ListView", {'records' : res}));
|
||||
$('[id^="oe_list_'+relational+'_'+self.element_id+'"]').html(openerp.web.qweb.render("ListView", {'records' : res,'data': additional}));
|
||||
$('[id^="oe_list_'+relational+'_'+self.element_id+'"]').find("[data-role=header]").find('h1').html(head);
|
||||
$('[id^="oe_list_'+relational+'_'+self.element_id+'"]').find("[data-role=header]").find('#home').click(function(){
|
||||
$.mobile.changePage("#oe_menu", "slide", false, true);
|
||||
|
@ -179,6 +178,7 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
}
|
||||
if(!$('[id^="oe_form_'+listid+result.fields[relational].relation+'"]').html()){
|
||||
$('<div id="oe_form_'+listid+result.fields[relational].relation+'" data-role="page" data-url="oe_form_'+listid+result.fields[relational].relation+'"> </div>').appendTo('#moe');
|
||||
|
||||
for (var k = 0; k < notebooks.children.length; k++) {
|
||||
if (notebooks.children[k].attrs.string == lastid) {
|
||||
get_fields = self.get_fields(notebooks.children[k].children);
|
||||
|
@ -194,7 +194,11 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
}
|
||||
}
|
||||
}
|
||||
$('[id^="oe_form_'+listid+result.fields[relational].relation+'"]').html(self.render({'get_fields': get_fields_test, 'notebooks': false, 'fields' : fields_test, 'values' : data_relational, 'temp_flag':'1' }));
|
||||
if(notebook){
|
||||
$('[id^="oe_form_'+listid+result.fields[relational].relation+'"]').html(self.render({'get_fields': get_fields_test, 'notebooks': false, 'fields' : fields_test, 'values' : data_relational, 'temp_flag':'1' }));
|
||||
}else{
|
||||
$('[id^="oe_form_'+listid+result.fields[relational].relation+'"]').html(self.render({'get_fields': get_fields_test, 'notebooks': false, 'fields' : fields, 'values' : data_relational, 'temp_flag':'1' }));
|
||||
}
|
||||
$('[id^="oe_form_'+listid+result.fields[relational].relation+'"]').find("[data-role=header]").find('h1').html(head_title);
|
||||
$('[id^="oe_form_'+listid+result.fields[relational].relation+'"]').find("[data-role=header]").find('#home').click(function(){
|
||||
$.mobile.changePage("#oe_menu", "slide", false, true);
|
||||
|
@ -229,7 +233,11 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
}
|
||||
}
|
||||
});
|
||||
self.formatdata(get_fields_test, fields_test, result, data_relational,'oe_form_'+listid+result.fields[relational].relation,'element');
|
||||
if(notebook){
|
||||
self.formatdata(get_fields_test, fields_test, result, data_relational,'oe_form_'+listid+result.fields[relational].relation,'element');
|
||||
}else{
|
||||
self.formatdata(get_fields_test, fields, result, data_relational,'oe_form_'+listid+result.fields[relational].relation,'element');
|
||||
}
|
||||
$.mobile.changePage('#oe_form_'+listid+result.fields[relational].relation, "slide", false, true);
|
||||
self.formatdata('', '', '', '','oe_form_'+listid+result.fields[relational].relation,'slider');
|
||||
}else{
|
||||
|
@ -241,7 +249,8 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
}else{
|
||||
$.mobile.changePage("#oe_list_"+relational+"_"+self.element_id, "slide", false, true);
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
$.mobile.changePage("#"+self.element_id, "slide", false, true);
|
||||
|
@ -256,6 +265,12 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
if (view_fields[i].tag == 'group') {
|
||||
this.get_fields(view_fields[i].children, this.fields);
|
||||
}
|
||||
if (view_fields[i].tag == 'level') {
|
||||
this.get_fields(view_fields[i].children, this.fields);
|
||||
}
|
||||
if (view_fields[i].tag == 'page') {
|
||||
this.get_fields(view_fields[i].children, this.fields);
|
||||
}
|
||||
}
|
||||
return this.fields;
|
||||
},
|
||||
|
@ -280,6 +295,18 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
$(this).val(dateresult);
|
||||
}
|
||||
}
|
||||
$('[id^="'+id+'"]').find('#website').each(function(){
|
||||
$(this).css('display','inline-block');
|
||||
$(this).css('width','60%');
|
||||
});
|
||||
$('[id^="'+id+'"]').find('#email').each(function(){
|
||||
$(this).css('display','inline-block');
|
||||
$(this).css('width','60%');
|
||||
});
|
||||
$('[id^="'+id+'"]').find('#email_from').each(function(){
|
||||
$(this).css('display','inline-block');
|
||||
$(this).css('width','60%');
|
||||
});
|
||||
});
|
||||
// Temp: Selection set as disabled
|
||||
$('[id^="'+id+'"]').find('select').each(function() {
|
||||
|
@ -297,6 +324,16 @@ openerp.web_mobile.FormView = openerp.web.Widget.extend({
|
|||
$(this).css('left', '-9999px');
|
||||
});
|
||||
});
|
||||
// image displayed with m2o field
|
||||
$('[id^="'+id+'"]').find('div[class=ui-select]').each(function(){
|
||||
$(this).next().each(function(){
|
||||
if($(this).attr('id')=="formbutton"){
|
||||
$(this).prev().css('display','inline-table');
|
||||
$(this).prev().find('a').find('.ui-btn-inner').removeClass('ui-btn-inner');
|
||||
$(this).prev().find('a').find('span:first').css('padding-right','150px');
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
|
|
@ -19,36 +19,52 @@ openerp.web_mobile.ListView = openerp.web.Widget.extend({
|
|||
var self = this;
|
||||
if (data.action.length) {
|
||||
this.action = data.action[0][2];
|
||||
this.on_search_data();
|
||||
return this.rpc('/web/listview/load', {
|
||||
model: this.action.res_model,
|
||||
view_id: this.action.views[0][0],
|
||||
view_type: "tree",
|
||||
context: this.action.context,
|
||||
toolbar: false
|
||||
}, this.on_search_data);
|
||||
}
|
||||
},
|
||||
on_search_data: function(ev){
|
||||
var self = this;
|
||||
var dataset = new openerp.web.DataSetStatic(this, this.action.res_model, this.action.context);
|
||||
dataset.name_search('', this.action.domain, 'ilike', false, function(result){
|
||||
self.$element.html(self.render({'records' : result}));
|
||||
self.$element.find("[data-role=header]").find('h1').html(self.action.name);
|
||||
self.$element.find("[data-role=header]").find('#home').click(function(){
|
||||
$.mobile.changePage("#oe_menu", "slide", false, true);
|
||||
});
|
||||
self.$element.find("[data-role=footer]").find('#shrotcuts').click(function(){
|
||||
if (!$('#oe_shortcuts').html().length) {
|
||||
this.shortcuts = new openerp.web_mobile.Shortcuts(self, "oe_shortcuts");
|
||||
this.shortcuts.start();
|
||||
}else{
|
||||
$.mobile.changePage("#oe_shortcuts", "slide", false, true);
|
||||
var dataset = new openerp.web.DataSetSearch(this, this.action.res_model,this.action.context);
|
||||
dataset.domain = self.action.domain;
|
||||
dataset.read_slice([], {}, function(result,ids){
|
||||
_.extend(self.action.context,{"html_name_get" : true});
|
||||
|
||||
var dataset1 = new openerp.web.DataSet(self, self.action.res_model,self.action.context);
|
||||
dataset1.name_get(dataset.ids,function(res){
|
||||
var additional = "";
|
||||
if(res['html_name_get']){
|
||||
additional = res['display'];
|
||||
}
|
||||
self.$element.html(self.render({'records': res, 'data': additional }));
|
||||
self.$element.find("[data-role=header]").find('h1').html(self.action.name);
|
||||
self.$element.find("[data-role=header]").find('#home').click(function(){
|
||||
$.mobile.changePage("#oe_menu", "slide", false, true);
|
||||
});
|
||||
self.$element.find("[data-role=footer]").find('#shrotcuts').click(function(){
|
||||
if (!$('#oe_shortcuts').html().length) {
|
||||
this.shortcuts = new openerp.web_mobile.Shortcuts(self, "oe_shortcuts");
|
||||
this.shortcuts.start();
|
||||
}else{
|
||||
$.mobile.changePage("#oe_shortcuts", "slide", false, true);
|
||||
}
|
||||
});
|
||||
self.$element.find("[data-role=footer]").find('#preference').click(function(){
|
||||
if(!$('#oe_options').html().length){
|
||||
this.options = new openerp.web_mobile.Options(self, "oe_options");
|
||||
this.options.start();
|
||||
}else{
|
||||
$.mobile.changePage("#oe_options", "slide", false, true);
|
||||
}
|
||||
});
|
||||
self.$element.find("a#list-id").click(self.on_list_click);
|
||||
$.mobile.changePage("#"+self.element_id, "slide", false, true);
|
||||
});
|
||||
self.$element.find("[data-role=footer]").find('#preference').click(function(){
|
||||
if(!$('#oe_options').html().length){
|
||||
this.options = new openerp.web_mobile.Options(self, "oe_options");
|
||||
this.options.start();
|
||||
}else{
|
||||
$.mobile.changePage("#oe_options", "slide", false, true);
|
||||
}
|
||||
});
|
||||
self.$element.find("a#list-id").click(self.on_list_click);
|
||||
$.mobile.changePage("#"+self.element_id, "slide", false, true);
|
||||
});
|
||||
},
|
||||
on_list_click: function(ev) {
|
||||
|
|
|
@ -132,13 +132,32 @@
|
|||
<t t-name="ListView">
|
||||
<t t-call="Header" />
|
||||
<div id="content" data-role="content">
|
||||
<ul data-role="listview" data-inset="true" data-theme="d" data-filter="true">
|
||||
<li data-theme="c" t-foreach="records" t-as="record">
|
||||
<a id="list-id" t-att-data-id="record[0]" href="#">
|
||||
<t t-esc="record[1]"/>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<t t-if="!(records.length>0)">
|
||||
No one record is created
|
||||
</t>
|
||||
<t t-if="records.length>0">
|
||||
<ul data-role="listview" data-inset="true" data-theme="d" data-filter="true">
|
||||
<li data-theme="c" t-foreach="records" t-as="record">
|
||||
<t t-foreach="record[1].split(',')" t-as="data1">
|
||||
<t t-if="record[1].split(',')[0]==data1">
|
||||
<a id="list-id" t-att-data-id="record[0]" href="#">
|
||||
<t t-esc="data1" />
|
||||
</a>
|
||||
</t>
|
||||
</t>
|
||||
<p>
|
||||
<t t-foreach="record[1].split(',')" t-as="data1">
|
||||
<t t-if="record[1].split(',')[0]!=data1">
|
||||
<t t-esc="data1" />
|
||||
</t>
|
||||
</t>
|
||||
</p>
|
||||
<t t-foreach="data" t-as="data1">
|
||||
<t t-esc="data1[0]" />
|
||||
</t>
|
||||
</li>
|
||||
</ul>
|
||||
</t>
|
||||
</div>
|
||||
<t t-call="Footer" />
|
||||
</t>
|
||||
|
@ -148,12 +167,11 @@
|
|||
<t t-call="Header" />
|
||||
</t>
|
||||
<div data-role="content">
|
||||
|
||||
<form>
|
||||
<t t-foreach="get_fields" t-as="field">
|
||||
<t t-foreach="get_fields" t-as="field">
|
||||
<div data-role="fieldcontain">
|
||||
<t t-if="fields[field.attrs.name].type == 'char'">
|
||||
<label for="">
|
||||
<label t-att-for="field.attrs.name">
|
||||
<t t-if="!(field.attrs.string)" t-esc="fields[field.attrs.name].string"></t>
|
||||
<t t-if="field.attrs.string" t-esc="field.attrs.string"></t>:
|
||||
</label>
|
||||
|
@ -178,7 +196,7 @@
|
|||
<textarea name="" id="" readonly="true"></textarea>
|
||||
</t>
|
||||
<t t-if="fields[field.attrs.name].type == 'integer'">
|
||||
<label for="">
|
||||
<label t-att-for="field.attrs.name">
|
||||
<t t-if="!(field.attrs.string)" t-esc="fields[field.attrs.name].string"></t>
|
||||
<t t-if="field.attrs.string" t-esc="field.attrs.string"></t>:
|
||||
</label>
|
||||
|
@ -190,7 +208,7 @@
|
|||
</t>
|
||||
</t>
|
||||
<t t-if="fields[field.attrs.name].type == 'float_time'">
|
||||
<label for="">
|
||||
<label t-att-for="field.attrs.name">
|
||||
<t t-if="!(field.attrs.string)" t-esc="fields[field.attrs.name].string"></t>
|
||||
<t t-if="field.attrs.string" t-esc="field.attrs.string"></t>:
|
||||
</label>
|
||||
|
@ -202,7 +220,7 @@
|
|||
</t>
|
||||
</t>
|
||||
<t t-if="fields[field.attrs.name].type == 'float'">
|
||||
<label for="">
|
||||
<label t-att-for="field.attrs.name">
|
||||
<t t-if="!(field.attrs.string)" t-esc="fields[field.attrs.name].string"></t>
|
||||
<t t-if="field.attrs.string" t-esc="field.attrs.string"></t>:
|
||||
</label>
|
||||
|
@ -277,14 +295,18 @@
|
|||
<select id="" data-native-menu="false" t-att-for="fields[field.attrs.name].relation">
|
||||
<t t-if="fields[field.attrs.name].selection">
|
||||
<t t-foreach="fields[field.attrs.name].selection" t-as="opt">
|
||||
<t t-if="values[field.attrs.name]==opt[0]">
|
||||
|
||||
<t t-if="values[field.attrs.name] and values[field.attrs.name]==opt[0]">
|
||||
<option t-att-value="opt[0]" selected="true" ><t t-esc="opt[1]"/></option>
|
||||
</t>
|
||||
<t t-if="values[field.attrs.name]!=opt[0]">
|
||||
<t t-if="values[field.attrs.name] and values[field.attrs.name]!=opt[0]">
|
||||
<option t-att-value="opt[0]" ><t t-esc="opt[1]"/></option>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
<t t-if="values[field.attrs.name] and !fields[field.attrs.name].selection">
|
||||
<option t-att-value="values[field.attrs.name][0]" ><t t-esc="values[field.attrs.name][1]"/></option>
|
||||
</t>
|
||||
</select>
|
||||
<t t-if="fields[field.attrs.name].selection">
|
||||
<a id="formbutton" href="#" title="Form View"><img src="/web/static/src/img/icons/gtk-index.png" /></a>
|
||||
|
@ -292,11 +314,11 @@
|
|||
</t>
|
||||
<t t-if="fields[field.attrs.name].type == 'one2many'">
|
||||
<ul data-role="listview" data-inset="true" data-theme="d">
|
||||
<li data-theme="c" t-att-for="field.attrs.name">
|
||||
<li data-theme="c" t-att-for="field.attrs.name" >
|
||||
<a href="">
|
||||
<t t-esc="til"/>
|
||||
<t t-esc="fields[field.attrs.name].string"/>
|
||||
</a>
|
||||
</li>
|
||||
</li>
|
||||
</ul>
|
||||
</t>
|
||||
</div>
|
||||
|
@ -325,4 +347,4 @@
|
|||
<t t-call="Footer" />
|
||||
</t>
|
||||
</t>
|
||||
</templates>
|
||||
</templates>
|
Loading…
Reference in New Issue