Merge PR #1974 into 13.0

Signed-off-by simahawk
pull/2032/head
OCA-git-bot 2021-09-17 13:08:20 +00:00
commit 93dea13656
2 changed files with 52 additions and 21 deletions

View File

@ -22,12 +22,22 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
template: "TranslateDialog", template: "TranslateDialog",
init: function(parent, options) { init: function(parent, options) {
var title_string = _t("Translate fields: /"); var title_string = _t("Translate fields: /");
var field_names = {};
var single_field = false; var single_field = false;
if (options.field) { if (options.field) {
var field_names = [options.field.fieldName]; this.record_id = options.field.id;
var record = parent.model.get(options.field.id);
this.model = record.model;
field_names[options.field.fieldName] =
record.fields[options.field.fieldName];
single_field = true; single_field = true;
title_string = title_string.replace("/", field_names); title_string = title_string.replace(
"/",
record.fields[options.field.fieldName].string
);
} else { } else {
this.record_id = parent.handle;
this.model = parent.modelName;
field_names = this.get_translatable_fields(parent); field_names = this.get_translatable_fields(parent);
} }
this._super(parent, {title: title_string, size: "x-large"}); this._super(parent, {title: title_string, size: "x-large"});
@ -54,7 +64,7 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
}); });
}, },
get_translatable_fields: function(parent) { get_translatable_fields: function(parent) {
var field_list = []; var field_list = {};
_.each(parent.renderer.state.fields, function(field, name) { _.each(parent.renderer.state.fields, function(field, name) {
var related_readonly = var related_readonly =
typeof field.related !== "undefined" && field.readonly; typeof field.related !== "undefined" && field.readonly;
@ -63,7 +73,7 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
!related_readonly && !related_readonly &&
parent.renderer.state.getFieldNames().includes(name) parent.renderer.state.getFieldNames().includes(name)
) { ) {
field_list.push(name); field_list[name] = field;
} }
}); });
return field_list; return field_list;
@ -120,14 +130,14 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
// Set maxlength if initial field has size attr // Set maxlength if initial field has size attr
_.each( _.each(
this.translatable_fields, this.translatable_fields,
function(field_name) { function(field, name) {
var size = $("[name=" + field_name + "]")[0].maxLength; var size = $("[name=" + name + "]")[0].maxLength;
if (size > 0) { if (size > 0) {
this.$( this.$(
'input.oe_translation_field[name$="' + 'input.oe_translation_field[name$="' +
field_name + name +
'"], textarea.oe_translation_field[name$="' + '"], textarea.oe_translation_field[name$="' +
field_name + name +
'"]' '"]'
).attr("maxlength", size); ).attr("maxlength", size);
} }
@ -193,15 +203,19 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
this.$(".oe_translation_field") this.$(".oe_translation_field")
.val("") .val("")
.removeClass("touched"); .removeClass("touched");
var translatable_fields = [];
_.forEach(this.translatable_fields, function(field, name) {
translatable_fields.push(name);
});
var def = $.Deferred(); var def = $.Deferred();
deferred.push(def); deferred.push(def);
rpc.query({ rpc.query({
model: this.view.modelName, model: this.model,
method: "get_field_translations", method: "get_field_translations",
args: [[this.res_id]], args: [[this.res_id]],
kwargs: { kwargs: {
field_names: this.translatable_fields, field_names: translatable_fields,
}, },
}).then(function(res) { }).then(function(res) {
if (res[self.res_id]) { if (res[self.res_id]) {
@ -235,7 +249,7 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
var context = new Context(session.user_context, {lang: code}); var context = new Context(session.user_context, {lang: code});
rpc.query({ rpc.query({
model: self.view.modelName, model: self.model,
method: "write", method: "write",
args: [self.res_id, text], args: [self.res_id, text],
kwargs: {context: context.eval()}, kwargs: {context: context.eval()},
@ -243,14 +257,21 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
done.resolve(); done.resolve();
}); });
if (code === self.view_language) { if (code === self.view_language) {
var changes = {};
_.each(text, function(value, key) { _.each(text, function(value, key) {
var view_elem = self.view.$(":input[name='" + key + "']"); changes[key] = value;
view_elem.val(value).trigger("change"); });
self.trigger_up("field_changed", {
dataPointID: self.record_id,
changes: changes,
}); });
} }
return done; return done;
}); });
}); });
save_mutex.exec(function() {
self.view.reload();
});
this.close(); this.close();
}, },
on_button_close: function() { on_button_close: function() {
@ -286,10 +307,23 @@ odoo.define("web_translate_dialog.translate_dialog", function(require) {
_onTranslate: function(event) { _onTranslate: function(event) {
// The image next to the fields opens the translate dialog // The image next to the fields opens the translate dialog
var res_id = event.target.res_id event.stopPropagation();
? event.target.res_id var self = this;
: event.target.state.res_id; var record = this.model.get(event.data.id, {raw: true});
this.open_translate_dialog(event.data, res_id); this._rpc({
route: "/web/dataset/call_button",
params: {
model: "ir.translation",
method: "translate_fields",
args: [record.model, record.res_id, event.data.fieldName],
kwargs: {context: record.getContext()},
},
}).then(function() {
var res_id = event.target.res_id
? event.target.res_id
: event.target.state.res_id;
self.open_translate_dialog(event.data, res_id);
});
}, },
}); });

View File

@ -29,10 +29,7 @@
</th> </th>
</tr> </tr>
<t t-foreach="widget.translatable_fields" t-as="field_name"> <t t-foreach="widget.translatable_fields" t-as="field_name">
<t <t t-set="field" t-value="widget.translatable_fields[field_name]" />
t-set="field"
t-value="widget.view.renderer.state.fields[field_name]"
/>
<tr t-att-data-field="field_name"> <tr t-att-data-field="field_name">
<td <td
t-if="!widget.single_field" t-if="!widget.single_field"