[FIX] web: kanban: always open dialog if quick create fails
Before this commit, when the user tried to quick create a record in a grouped kanban view (by clicking on the "+" icon of a column, for instance), and then clicked on the "Edit" button of the quick create, if the name_create rpc failed, the webclient switched to the form view and an error was displayed. The displayed error was about a destroyed component trying to do an rpc, namely the kanban controller. This is because it does 2 things when the name_create failed: it opened the form view in a dialog and it also switched to the form view. The latter was unwanted: in case of errors, we don't want to switch to the form view but rather to quick create from a dialog. The error was actually caused by a small mistake: we use the record variable to determine if the quick create succeeded and if we can switch to the quick created record. However, that same variable was already set before, for another purpose. OPW 3620671 closes odoo/odoo#146141 X-original-commit: 01bc79051b22f41eff20d860327ed0e41b572cd4 Signed-off-by: Francois Georis (fge) <fge@odoo.com> Signed-off-by: Aaron Bohy (aab) <aab@odoo.com>
This commit is contained in:
@@ -3946,6 +3946,68 @@ QUnit.module("Views", (hooks) => {
|
||||
assert.containsOnce(target, ".o_kanban_quick_create:not(.o_disabled)");
|
||||
});
|
||||
|
||||
QUnit.test("quick create record and click Edit, name_create fails", async (assert) => {
|
||||
Object.assign(serverData, {
|
||||
views: {
|
||||
"partner,false,kanban": `
|
||||
<kanban sample="1">
|
||||
<field name="product_id"/>
|
||||
<templates>
|
||||
<t t-name="kanban-box">
|
||||
<div><field name="name"/></div>
|
||||
</t>
|
||||
</templates>
|
||||
</kanban>`,
|
||||
"partner,false,search": "<search/>",
|
||||
"partner,false,list": '<tree><field name="foo"/></tree>',
|
||||
"partner,false,form": `<form>
|
||||
<field name="product_id"/>
|
||||
<field name="foo"/>
|
||||
</form>`,
|
||||
},
|
||||
});
|
||||
|
||||
const webClient = await createWebClient({
|
||||
serverData,
|
||||
async mockRPC(route, args) {
|
||||
if (args.method === "name_create") {
|
||||
throw makeServerError({ message: "This is a user error" });
|
||||
}
|
||||
},
|
||||
});
|
||||
|
||||
await doAction(webClient, {
|
||||
res_model: "partner",
|
||||
type: "ir.actions.act_window",
|
||||
views: [
|
||||
[false, "kanban"],
|
||||
[false, "form"],
|
||||
],
|
||||
context: {
|
||||
group_by: ["product_id"],
|
||||
},
|
||||
});
|
||||
|
||||
assert.containsN(target.querySelector(".o_kanban_group"), ".o_kanban_record", 2);
|
||||
|
||||
await quickCreateRecord(0);
|
||||
assert.containsOnce(target.querySelector(".o_kanban_group"), ".o_kanban_quick_create");
|
||||
|
||||
await editQuickCreateInput("display_name", "test");
|
||||
await editRecord();
|
||||
assert.containsOnce(target, ".modal .o_form_view .o_form_editable");
|
||||
assert.strictEqual(target.querySelector(".modal .o_field_many2one input").value, "hello");
|
||||
|
||||
// specify a name and save
|
||||
await editInput(target, ".modal .o_field_widget[name=foo] input", "test");
|
||||
await click(target, ".modal .o_form_button_save");
|
||||
assert.containsNone(target, ".modal");
|
||||
assert.containsN(target.querySelector(".o_kanban_group"), ".o_kanban_record", 3);
|
||||
const firstRecord = target.querySelector(".o_kanban_group .o_kanban_record");
|
||||
assert.strictEqual(firstRecord.innerText, "test");
|
||||
assert.containsOnce(target, ".o_kanban_quick_create:not(.o_disabled)");
|
||||
});
|
||||
|
||||
QUnit.test("quick create record is re-enabled after discard on failure", async (assert) => {
|
||||
serverData.views["partner,false,form"] = `
|
||||
<form>
|
||||
|
||||
Reference in New Issue
Block a user