diff --git a/addons/web/static/src/views/debug_items.js b/addons/web/static/src/views/debug_items.js index 5acafc76192..7a7afada3a8 100644 --- a/addons/web/static/src/views/debug_items.js +++ b/addons/web/static/src/views/debug_items.js @@ -11,6 +11,7 @@ import { formatMany2one } from "@web/views/fields/formatters"; import { FormViewDialog } from "@web/views/view_dialogs/form_view_dialog"; import { Component, onWillStart, useState, xml } from "@odoo/owl"; +import {serializeDate, serializeDateTime} from "../core/l10n/dates"; const debugRegistry = registry.category("debug"); @@ -321,9 +322,15 @@ class SetDefaultDialog extends Component { if (!this.state.fieldToSet) { return; } - const fieldToSet = this.defaultFields.find((field) => { + let fieldToSet = this.defaultFields.find((field) => { return field.name === this.state.fieldToSet; }).value; + + if(fieldToSet.constructor.name.toLowerCase() === "date"){ + fieldToSet = serializeDate(fieldToSet); + } else if (fieldToSet.constructor.name.toLowerCase() === "datetime"){ + fieldToSet = serializeDateTime(fieldToSet); + } await this.orm.call("ir.default", "set", [ this.props.record.resModel, this.state.fieldToSet, diff --git a/addons/web/static/tests/core/debug/debug_manager_tests.js b/addons/web/static/tests/core/debug/debug_manager_tests.js index 761875e7f77..b475c3493c5 100644 --- a/addons/web/static/tests/core/debug/debug_manager_tests.js +++ b/addons/web/static/tests/core/debug/debug_manager_tests.js @@ -808,4 +808,80 @@ QUnit.module("DebugMenu", (hooks) => { ] ); }); + + QUnit.test("set defaults: setting default value for datetime field", async (assert) => { + assert.expect(7); + + prepareRegistriesWithCleanup(); + patchWithCleanup(odoo, { + debug: true, + }); + + registry.category("services").add("user", makeFakeUserService()); + registry.category("debug").category("form").add("setDefaults", setDefaults); + + const serverData = getActionManagerServerData(); + serverData.actions[1234] = { + id: 1234, + xml_id: "action_1234", + name: "Partners", + res_model: "partner", + res_id: 1, + type: "ir.actions.act_window", + views: [[18, "form"]], + }; + serverData.models.partner.fields.datetime = {string: 'Datetime', type: 'datetime'} + serverData.models.partner.fields.reference = {string: 'Reference', type: 'reference', selection: [["pony", "Pony"]]} + serverData.views["partner,18,form"] = ` +
+ + + + `; + serverData.models["ir.ui.view"] = { + fields: {}, + records: [{ id: 18 }], + }; + serverData.models.pony.records = [{ + id: 1, + name: "Test" + }]; + serverData.models.partner.records = [{ + id: 1, + display_name: "p1", + datetime: "2024-01-24 16:46:16", + reference: 'pony,1', + m2o: 1 + }]; + + const mockRPC = async (route, args) => { + if (args.method === "check_access_rights") { + return Promise.resolve(true); + } + if (args.method === "set" && args.model === "ir.default") { + arg_steps.push(args.args) + return true; + } + }; + const webClient = await createWebClient({serverData, mockRPC}); + let arg_steps = []; + for (const field_name of ['datetime', 'reference', 'm2o']) { + await doAction(webClient, 1234); + await click(target.querySelector(".o_debug_manager button")); + await click(target.querySelector(".o_debug_manager .dropdown-item")); + assert.containsOnce(target, ".modal"); + + const select = target.querySelector(".modal #formview_default_fields"); + select.value = field_name; + select.dispatchEvent(new Event("change")); + await nextTick(); + await click(target.querySelectorAll(".modal .modal-footer button")[1]); + assert.containsNone(target, ".modal"); + } + assert.deepEqual(arg_steps, [ + ["partner", "datetime", "2024-01-24 16:46:16", true, true, false], + ["partner", "reference", {"displayName": "Test", "resId": 1, "resModel": "pony"}, true, true, false], + ["partner", "m2o", 1, true, true, false], + ]); + }); });