[FIX] web : allow setting iso format date as default
Steps to reproduce: 1- Install Sales module 2- Activate developer mode 3- Navigate to any storable product 4- Click on 'Replenish' 5- Click on 'developer bug' and Choose 'Set Defaults' 6- Choose 'Scheduled Date' from the 'Default' dropdown menu and Save Current behavior before PR: When trying to set a default value for scheduled date in 'Replenish' for a product it will display an error for 'Invalid type' this is happening because when converting the string value to a datetime value it does not handle iso format date and this is the format that gets passed from the UI. Desired behavior after PR is merged: It is handled now from the UI side that the format that is been sent is the server valid format of datetime. opw-3692472 closes odoo/odoo#154209 X-original-commit: 6dc46639935fdc175b2d094b58ef4e66c68466b0 Signed-off-by: Luca Vitali (luvi) <luvi@odoo.com> Signed-off-by: Youssef Bashandy (yoba) <yoba@odoo.com>
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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"] = `
|
||||
<form>
|
||||
<field name="datetime"/>
|
||||
<field name="reference"/>
|
||||
<field name="m2o"/>
|
||||
</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],
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user