289 lines
11 KiB
JavaScript
289 lines
11 KiB
JavaScript
openerp.web.page = function (openerp) {
|
|
var _t = openerp.web._t,
|
|
_lt = openerp.web._lt;
|
|
|
|
openerp.web.views.add('page', 'openerp.web.PageView');
|
|
openerp.web.PageView = openerp.web.FormView.extend({
|
|
form_template: "PageView",
|
|
display_name: _lt('Page'),
|
|
init: function () {
|
|
this._super.apply(this, arguments);
|
|
this.registry = openerp.web.page.readonly;
|
|
},
|
|
reload: function () {
|
|
if (this.dataset.index == null) {
|
|
this.do_prev_view();
|
|
return $.Deferred().reject().promise();
|
|
}
|
|
return this._super();
|
|
},
|
|
on_loaded: function(data) {
|
|
this._super(data);
|
|
this.$form_header.find('button.oe_form_button_edit').click(this.on_button_edit);
|
|
this.$form_header.find('button.oe_form_button_create').click(this.on_button_create);
|
|
this.$form_header.find('button.oe_form_button_duplicate').click(this.on_button_duplicate);
|
|
this.$form_header.find('button.oe_form_button_delete').click(this.on_button_delete);
|
|
},
|
|
on_button_edit: function() {
|
|
return this.do_switch_view('form');
|
|
},
|
|
on_button_create: function() {
|
|
this.dataset.index = null;
|
|
return this.do_switch_view('form');
|
|
},
|
|
on_button_duplicate: function() {
|
|
var self = this;
|
|
var def = $.Deferred();
|
|
$.when(this.has_been_loaded).then(function() {
|
|
self.dataset.call('copy', [self.datarecord.id, {}, self.dataset.context]).then(function(new_id) {
|
|
return self.on_created({ result : new_id });
|
|
}).then(function() {
|
|
return self.do_switch_view('form');
|
|
}).then(function() {
|
|
def.resolve();
|
|
});
|
|
});
|
|
return def.promise();
|
|
},
|
|
on_button_delete: function() {
|
|
var self = this;
|
|
var def = $.Deferred();
|
|
$.when(this.has_been_loaded).then(function() {
|
|
if (self.datarecord.id && 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 {
|
|
$.async_when().then(function () {
|
|
def.reject();
|
|
})
|
|
}
|
|
});
|
|
return def.promise();
|
|
}
|
|
});
|
|
|
|
/** @namespace */
|
|
openerp.web.page = {};
|
|
|
|
openerp.web.page.WidgetFrameReadonly = openerp.web.form.WidgetFrame.extend({
|
|
form_template: 'WidgetFrame.readonly'
|
|
});
|
|
openerp.web.page.FieldReadonly = openerp.web.form.Field.extend({
|
|
|
|
});
|
|
openerp.web.page.FieldCharReadonly = openerp.web.page.FieldReadonly.extend({
|
|
form_template: 'FieldChar.readonly',
|
|
init: function(view, node) {
|
|
this._super(view, node);
|
|
this.password = this.node.attrs.password === 'True' || this.node.attrs.password === '1';
|
|
},
|
|
set_value: function (value) {
|
|
this._super.apply(this, arguments);
|
|
var show_value = openerp.web.format_value(value, this, '');
|
|
if (this.password) {
|
|
show_value = new Array(show_value.length + 1).join('*');
|
|
}
|
|
this.$element.find('div').text(show_value);
|
|
return show_value;
|
|
}
|
|
});
|
|
openerp.web.page.FieldFloatReadonly = openerp.web.page.FieldCharReadonly.extend({
|
|
init: function (view, node) {
|
|
this._super(view, node);
|
|
if (node.attrs.digits) {
|
|
this.digits = py.eval(node.attrs.digits);
|
|
} else {
|
|
this.digits = view.fields_view.fields[node.attrs.name].digits;
|
|
}
|
|
}
|
|
});
|
|
openerp.web.page.FieldURIReadonly = openerp.web.page.FieldCharReadonly.extend({
|
|
form_template: 'FieldURI.readonly',
|
|
scheme: null,
|
|
format_value: function (value) {
|
|
return value;
|
|
},
|
|
set_value: function (value) {
|
|
if (!value) {
|
|
this.$element.find('a').text('').attr('href', '#');
|
|
return;
|
|
}
|
|
this.$element.find('a')
|
|
.attr('href', this.scheme + ':' + value)
|
|
.text(this.format_value(value));
|
|
}
|
|
});
|
|
openerp.web.page.FieldEmailReadonly = openerp.web.page.FieldURIReadonly.extend({
|
|
scheme: 'mailto'
|
|
});
|
|
openerp.web.page.FieldUrlReadonly = openerp.web.page.FieldURIReadonly.extend({
|
|
set_value: function (value) {
|
|
if (!value) {
|
|
this.$element.find('a').text('').attr('href', '#');
|
|
return;
|
|
}
|
|
var s = /(\w+):(.+)/.exec(value);
|
|
if (!s) {
|
|
value = "http://" + value;
|
|
}
|
|
this.$element.find('a').attr('href', value).text(value);
|
|
}
|
|
});
|
|
openerp.web.page.FieldBooleanReadonly = openerp.web.form.FieldBoolean.extend({
|
|
update_dom: function() {
|
|
this._super.apply(this, arguments);
|
|
this.$element.find('input').prop('disabled', true);
|
|
}
|
|
});
|
|
openerp.web.page.FieldSelectionReadonly = openerp.web.page.FieldReadonly.extend({
|
|
form_template: 'FieldChar.readonly',
|
|
init: function(view, node) {
|
|
// lifted straight from r/w version
|
|
var self = this;
|
|
this._super(view, node);
|
|
this.values = _.clone(this.field.selection);
|
|
_.each(this.values, function(v, i) {
|
|
if (v[0] === false && v[1] === '') {
|
|
self.values.splice(i, 1);
|
|
}
|
|
});
|
|
this.values.unshift([false, '']);
|
|
},
|
|
set_value: function (value) {
|
|
value = value === null ? false : value;
|
|
value = value instanceof Array ? value[0] : value;
|
|
var option = _(this.values)
|
|
.detect(function (record) { return record[0] === value; });
|
|
this._super(value);
|
|
this.$element.find('div').text(option ? option[1] : this.values[0][1]);
|
|
}
|
|
});
|
|
openerp.web.page.FieldMany2OneReadonly = openerp.web.page.FieldURIReadonly.extend({
|
|
set_value: function (value) {
|
|
value = value || null;
|
|
this.invalid = false;
|
|
var self = this;
|
|
this.value = value;
|
|
self.update_dom();
|
|
self.on_value_changed();
|
|
var real_set_value = function(rval) {
|
|
self.value = rval;
|
|
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, 'page'], [false, 'form']],
|
|
target: 'current'
|
|
});
|
|
return false;
|
|
});
|
|
};
|
|
if (value && !(value instanceof Array)) {
|
|
new openerp.web.DataSetStatic(
|
|
this, this.field.relation, self.build_context())
|
|
.name_get([value], function(data) {
|
|
real_set_value(data[0]);
|
|
});
|
|
} else {
|
|
$.async_when().then(function() {real_set_value(value);});
|
|
}
|
|
},
|
|
get_value: function() {
|
|
if (!this.value) {
|
|
return false;
|
|
} else if (this.value instanceof Array) {
|
|
return this.value[0];
|
|
} else {
|
|
return this.value;
|
|
}
|
|
}
|
|
});
|
|
openerp.web.page.FieldReferenceReadonly = openerp.web.page.FieldMany2OneReadonly.extend({
|
|
set_value: function (value) {
|
|
if (!value) {
|
|
return this._super(null);
|
|
}
|
|
var reference = value.split(',');
|
|
this.field.relation = reference[0];
|
|
var id = parseInt(reference[1], 10);
|
|
return this._super(id);
|
|
},
|
|
get_value: function () {
|
|
if (!this.value) {
|
|
return null;
|
|
}
|
|
var id;
|
|
if (typeof this.value === 'number') {
|
|
// name_get has not run yet
|
|
id = this.value;
|
|
} else {
|
|
id = this.value[0];
|
|
}
|
|
return _.str.sprintf('%s,%d', this.field.relation, id);
|
|
}
|
|
});
|
|
|
|
openerp.web.page.FieldMany2ManyReadonly = openerp.web.form.FieldMany2Many.extend({
|
|
force_readonly: true
|
|
});
|
|
openerp.web.page.FieldOne2ManyReadonly = openerp.web.form.FieldOne2Many.extend({
|
|
force_readonly: true
|
|
});
|
|
openerp.web.page.FieldBinaryImageReaonly = openerp.web.form.FieldBinaryImage.extend({
|
|
update_dom: function() {
|
|
this._super.apply(this, arguments);
|
|
this.$element.find('.oe-binary').hide();
|
|
}
|
|
});
|
|
openerp.web.page.FieldBinaryFileReadonly = openerp.web.form.FieldBinary.extend({
|
|
form_template: 'FieldURI.readonly',
|
|
start: function() {
|
|
this._super.apply(this, arguments);
|
|
var self = this;
|
|
this.$element.find('a').click(function() {
|
|
if (self.value) {
|
|
self.on_save_as();
|
|
}
|
|
return false;
|
|
});
|
|
},
|
|
set_value: function(value) {
|
|
this._super.apply(this, arguments);
|
|
this.$element.find('a').show(!!value);
|
|
if (value) {
|
|
var show_value = _t("Download") + " " + (this.view.datarecord[this.node.attrs.filename] || '');
|
|
this.$element.find('a').text(show_value);
|
|
}
|
|
}
|
|
});
|
|
openerp.web.page.readonly = openerp.web.form.widgets.extend({
|
|
'frame': 'openerp.web.page.WidgetFrameReadonly',
|
|
'char': 'openerp.web.page.FieldCharReadonly',
|
|
'id': 'openerp.web.page.FieldCharReadonly',
|
|
'email': 'openerp.web.page.FieldEmailReadonly',
|
|
'url': 'openerp.web.page.FieldUrlReadonly',
|
|
'text': 'openerp.web.page.FieldCharReadonly',
|
|
'date': 'openerp.web.page.FieldCharReadonly',
|
|
'datetime': 'openerp.web.page.FieldCharReadonly',
|
|
'selection' : 'openerp.web.page.FieldSelectionReadonly',
|
|
'many2one': 'openerp.web.page.FieldMany2OneReadonly',
|
|
'many2many' : 'openerp.web.page.FieldMany2ManyReadonly',
|
|
'one2many' : 'openerp.web.page.FieldOne2ManyReadonly',
|
|
'one2many_list' : 'openerp.web.page.FieldOne2ManyReadonly',
|
|
'reference': 'openerp.web.page.FieldReferenceReadonly',
|
|
'boolean': 'openerp.web.page.FieldBooleanReadonly',
|
|
'float': 'openerp.web.page.FieldFloatReadonly',
|
|
'integer': 'openerp.web.page.FieldCharReadonly',
|
|
'float_time': 'openerp.web.page.FieldCharReadonly',
|
|
'binary': 'openerp.web.page.FieldBinaryFileReadonly',
|
|
'image': 'openerp.web.page.FieldBinaryImageReaonly'
|
|
});
|
|
};
|