19.0 vanilla

This commit is contained in:
Ernad Husremovic 2026-03-09 09:32:12 +01:00
parent 79f83631d5
commit 73afc09215
6267 changed files with 1534193 additions and 1130106 deletions

View file

@ -0,0 +1,80 @@
import { expect, test } from "@odoo/hoot";
import { contains as webContains, onRpc } from "@web/../tests/web_test_helpers";
import {
contains,
openFormView,
start,
startServer,
} from "@mail/../tests/mail_test_helpers";
import { defineCrmTeamModels } from "@sales_team/../tests/crm_team_test_helpers";
defineCrmTeamModels();
test("crm team form activate multi-team option via alert", async () => {
expect.assertions(7);
const pyEnv = await startServer();
const partnerId = pyEnv["res.partner"].create({ name: "Maria" });
const userId = pyEnv["res.users"].create({ partner_id: partnerId });
const [teamId_1] = pyEnv["crm.team"].create([
{
name: "Team1",
member_ids: [userId],
},
{
name: "Team2",
member_ids: [userId],
},
]);
onRpc("has_group", ({ args }) => {
expect.step("has_group");
expect(args[1]).toBe("sales_team.group_sale_manager");
return true;
});
onRpc("set_param", ({ args }) => {
expect.step("set_param");
expect(args[0]).toBe("sales_team.membership_multi");
return true;
});
await start();
await openFormView("crm.team", teamId_1, {
arch: `<form js_class="crm_team_form">
<field name="is_membership_multi" invisible="1"/>
<field name="member_warning" invisible="1"/>
<div class="alert alert-info" invisible="is_membership_multi or not member_warning">
<field name="member_warning"/>
Working in multiple teams?
<button name="crm_team_activate_multi_membership" type="button">
Activate "Multi-team"
</button>
</div>
<sheet>
<field name="member_ids">
<kanban>
<templates>
<t t-name="card">
<field name="name"/>
</t>
</templates>
</kanban>
</field>
</sheet>
</form>`,
});
// Members list should have Maria which is already in Team2 => Alert should be shown
await expect(".o_field_widget[name='member_ids'] .o_kanban_record:visible:not(.o-kanban-button-new)").toHaveCount(1);
await expect(".o_field_widget[name='member_ids'] .o_kanban_record:visible:not(.o-kanban-button-new)").toHaveText("Maria");
await contains(".alert:visible", { count: 1 });
// Clicking on the button should update the multi-team option and remove the alert
await webContains(".alert button[name='crm_team_activate_multi_membership']").click();
await contains(".alert:visible", { count: 0 });
expect.verifySteps([
"has_group",
"set_param",
]);
});

View file

@ -0,0 +1,9 @@
import { defineModels } from "@web/../tests/web_test_helpers";
import { mailModels } from "@mail/../tests/mail_test_helpers";
import { CrmTeam } from "./mock_server/mock_models/crm_team";
export function defineCrmTeamModels() {
return defineModels({ CrmTeam, ...mailModels });
}

View file

@ -0,0 +1,21 @@
import { fields, models } from "@web/../tests/web_test_helpers";
export class CrmTeam extends models.ServerModel {
_name = "crm.team";
name = fields.Char();
member_ids = fields.Many2many({ string: "Salespersons", relation: "res.users" });
is_membership_multi = fields.Boolean({ default: false });
member_warning = fields.Text({ compute: "_compute_member_warning" });
_compute_member_warning() {
for (const team of this) {
const other_memberships = this.env["crm.team"].search_count([
["id", "!=", team.id],
["member_ids", "in", team.member_ids]
]);
team.member_warning = other_memberships ? "Users already in other teams." : false;
}
}
}