diff --git a/spreadsheet_oca/__manifest__.py b/spreadsheet_oca/__manifest__.py
index 0fa2033..73b8c97 100644
--- a/spreadsheet_oca/__manifest__.py
+++ b/spreadsheet_oca/__manifest__.py
@@ -34,6 +34,7 @@
"spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_renderer.esm.js",
"spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_controlpanel.esm.js",
"spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet_action.esm.js",
+ "spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js",
],
},
}
diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js b/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js
new file mode 100644
index 0000000..970ef04
--- /dev/null
+++ b/spreadsheet_oca/static/src/spreadsheet/bundle/odoo_panels.esm.js
@@ -0,0 +1,76 @@
+/** @odoo-module */
+
+import {Domain} from "@web/core/domain";
+import {Many2OneField} from "@web/views/fields/many2one/many2one_field";
+import spreadsheet from "@spreadsheet/o_spreadsheet/o_spreadsheet_extended";
+import {useService} from "@web/core/utils/hooks";
+
+const {chartSidePanelComponentRegistry} = spreadsheet.registries;
+const {LineBarPieDesignPanel} = spreadsheet.components;
+const {Component} = owl;
+
+export class OdooPanel extends Component {
+ setup() {
+ this.menus = useService("menu");
+ }
+ get menuId() {
+ const menu = this.env.model.getters.getChartOdooMenu(this.props.figureId);
+ if (menu) {
+ return [menu.id, menu.name];
+ }
+ return undefined;
+ }
+ updateMenu(menuId) {
+ if (!menuId) {
+ this.env.model.dispatch("LINK_ODOO_MENU_TO_CHART", {
+ chartId: this.props.figureId,
+ odooMenuId: undefined,
+ });
+ return;
+ }
+ const menu = this.env.model.getters.getIrMenu(menuId[0]);
+ this.env.model.dispatch("LINK_ODOO_MENU_TO_CHART", {
+ chartId: this.props.figureId,
+ odooMenuId: menu.xmlid || menu.id,
+ });
+ }
+ get record() {
+ const menus = this.menus
+ .getAll()
+ .map((menu) => menu.id)
+ .filter((menuId) => menuId !== "root");
+ return {
+ getFieldDomain: function () {
+ return new Domain([["id", "in", menus]]);
+ },
+ getFieldContext: function () {
+ return {};
+ },
+ };
+ }
+}
+OdooPanel.template = "spreadsheet_oca.OdooPanel";
+OdooPanel.components = {Many2OneField};
+
+class OdooStackablePanel extends OdooPanel {
+ onChangeStacked(ev) {
+ this.props.updateChart(this.props.figureId, {
+ stacked: ev.target.checked,
+ });
+ }
+}
+OdooStackablePanel.template = "spreadsheet_oca.OdooStackablePanel";
+
+chartSidePanelComponentRegistry
+ .add("odoo_line", {
+ configuration: OdooStackablePanel,
+ design: LineBarPieDesignPanel,
+ })
+ .add("odoo_bar", {
+ configuration: OdooStackablePanel,
+ design: LineBarPieDesignPanel,
+ })
+ .add("odoo_pie", {
+ configuration: OdooPanel,
+ design: LineBarPieDesignPanel,
+ });
diff --git a/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml
index 9bd6778..0978453 100644
--- a/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml
+++ b/spreadsheet_oca/static/src/spreadsheet/bundle/spreadsheet.xml
@@ -386,4 +386,40 @@
+
+
+
Link to Odoo menu
+
+
+
+
+
+
+
+
+
+
diff --git a/spreadsheet_oca/static/src/spreadsheet/spreadsheet.scss b/spreadsheet_oca/static/src/spreadsheet/spreadsheet.scss
index eecba72..aae0756 100644
--- a/spreadsheet_oca/static/src/spreadsheet/spreadsheet.scss
+++ b/spreadsheet_oca/static/src/spreadsheet/spreadsheet.scss
@@ -57,4 +57,9 @@
}
}
}
+ .o-section-value {
+ .o_field_many2one_selection {
+ width: 100%;
+ }
+ }
}