diff --git a/mis_builder/README.rst b/mis_builder/README.rst index 7229bbbf4..79c329c96 100644 --- a/mis_builder/README.rst +++ b/mis_builder/README.rst @@ -7,7 +7,7 @@ MIS Builder !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:ad8a16269072f6f33f616ae2dc9b91ad0a77d135f607c4a664429781f28572c1 + !! source digest: sha256:1cbdc7c822a2d4f34e29edb7301fdf8d3d884c1292e467736a94235030cbf8ec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Production%2FStable-green.png diff --git a/mis_builder/__manifest__.py b/mis_builder/__manifest__.py index 492354886..23e634ae6 100644 --- a/mis_builder/__manifest__.py +++ b/mis_builder/__manifest__.py @@ -33,12 +33,17 @@ "mis_builder/static/src/components/mis_report_widget.esm.js", "mis_builder/static/src/components/mis_report_widget.xml", "mis_builder/static/src/components/mis_report_widget.css", + "mis_builder/static/src/views/field/field.esm.js", + "mis_builder/static/src/views/form/mis_report_form_compiler.esm.js", + "mis_builder/static/src/views/form/mis_report_form_controller.esm.js", + "mis_builder/static/src/views/form/mis_report_form_controller.xml", + "mis_builder/static/src/views/form/mis_report_form_renderer.esm.js", + "mis_builder/static/src/views/form/mis_report_form_view.esm.js", ], "web.report_assets_common": [ "/mis_builder/static/src/css/report.css", ], }, - "qweb": ["static/src/xml/mis_report_widget.xml"], "installable": True, "application": True, "license": "AGPL-3", diff --git a/mis_builder/static/description/index.html b/mis_builder/static/description/index.html index 103f3adf7..0afc0824d 100644 --- a/mis_builder/static/description/index.html +++ b/mis_builder/static/description/index.html @@ -367,7 +367,7 @@
This module allows you to build Management Information Systems dashboards.
diff --git a/mis_builder/static/src/components/mis_report_widget.esm.js b/mis_builder/static/src/components/mis_report_widget.esm.js
index 5b8db981f..1051b1786 100644
--- a/mis_builder/static/src/components/mis_report_widget.esm.js
+++ b/mis_builder/static/src/components/mis_report_widget.esm.js
@@ -9,6 +9,9 @@ import {SearchBar} from "@web/search/search_bar/search_bar";
import {parseDate} from "@web/core/l10n/dates";
import {registry} from "@web/core/registry";
import {standardFieldProps} from "@web/views/fields/standard_field_props";
+import {useSetupAction} from "@web/webclient/actions/action_hook";
+
+export const misReportWidgetClassName = "mis_report_widget";
export class MisReportWidget extends Component {
setup() {
@@ -33,6 +36,18 @@ export class MisReportWidget extends Component {
this.refresh();
});
onWillStart(this.willStart);
+ useSetupAction({
+ getGlobalState: () => {
+ if (!this.showSearchBar) {
+ return {};
+ }
+ return {
+ misReportSearchModelState: JSON.stringify(
+ this.searchModel.exportState()
+ ),
+ };
+ },
+ });
}
// Lifecycle
@@ -59,11 +74,15 @@ export class MisReportWidget extends Component {
this.widget_show_pivot_date = result.widget_show_pivot_date;
if (this.showSearchBar) {
// Initialize the search model
- await this.searchModel.load({
+ const config = {
resModel: this.source_aml_model_name,
searchViewId: this.widget_search_view_id,
analyticAccountId: this.analyticAccountId,
- });
+ };
+ if (this.props.misReportSearchModelState) {
+ config.state = JSON.parse(this.props.misReportSearchModelState);
+ }
+ await this.searchModel.load(config);
}
// Compute the report
@@ -232,9 +251,15 @@ MisReportWidget.props = {
type: String,
optional: true,
},
+ misReportSearchModelState: {
+ type: String,
+ optional: true,
+ },
+};
+MisReportWidget.extractProps = ({attrs}) => {
+ return {
+ analyticAccountIdField: attrs.analytic_account_id_field,
+ };
};
-MisReportWidget.extractProps = ({attrs}) => ({
- analyticAccountIdField: attrs.analytic_account_id_field,
-});
-registry.category("fields").add("mis_report_widget", MisReportWidget);
+registry.category("fields").add(misReportWidgetClassName, MisReportWidget);
diff --git a/mis_builder/static/src/views/field/field.esm.js b/mis_builder/static/src/views/field/field.esm.js
new file mode 100644
index 000000000..1513a5917
--- /dev/null
+++ b/mis_builder/static/src/views/field/field.esm.js
@@ -0,0 +1,23 @@
+/** @odoo-module **/
+
+import {Field} from "@web/views/fields/field";
+import {misReportWidgetClassName} from "@mis_builder/components/mis_report_widget.esm";
+
+export class MisReportField extends Field {
+ /**
+ * @override
+ */
+ get fieldComponentProps() {
+ const fieldComponentProps = super.fieldComponentProps;
+ // Ensures that misReportSearchModelState is passed to the props of the
+ // `mis_report_widget` widget that is mounted on the field.
+ if (
+ this.props.fieldInfo.widget &&
+ this.props.fieldInfo.widget === misReportWidgetClassName
+ ) {
+ fieldComponentProps.misReportSearchModelState =
+ this.props.misReportSearchModelState;
+ }
+ return fieldComponentProps;
+ }
+}
diff --git a/mis_builder/static/src/views/form/mis_report_form_compiler.esm.js b/mis_builder/static/src/views/form/mis_report_form_compiler.esm.js
new file mode 100644
index 000000000..bb342fbb6
--- /dev/null
+++ b/mis_builder/static/src/views/form/mis_report_form_compiler.esm.js
@@ -0,0 +1,25 @@
+/** @odoo-module **/
+
+import {FormCompiler} from "@web/views/form/form_compiler";
+import {misReportWidgetClassName} from "@mis_builder/components/mis_report_widget.esm";
+
+export class MisReportFormCompiler extends FormCompiler {
+ /**
+ * @override
+ */
+ compileField(el) {
+ // Passes misReportSearchModelState to the Field that is compiled in the
+ // view when the field has the `mis_report_widget` widget set.
+ const field = super.compileField(el);
+ if (
+ el.hasAttribute("widget") &&
+ el.getAttribute("widget") === misReportWidgetClassName
+ ) {
+ field.setAttribute(
+ "misReportSearchModelState",
+ "props.globalState && props.globalState.misReportSearchModelState"
+ );
+ }
+ return field;
+ }
+}
diff --git a/mis_builder/static/src/views/form/mis_report_form_controller.esm.js b/mis_builder/static/src/views/form/mis_report_form_controller.esm.js
new file mode 100644
index 000000000..22b9faf7a
--- /dev/null
+++ b/mis_builder/static/src/views/form/mis_report_form_controller.esm.js
@@ -0,0 +1,8 @@
+/** @odoo-module */
+
+import {FormController} from "@web/views/form/form_controller";
+
+export class MisReportFormController extends FormController {}
+
+// Ensures that globalState is passed to the renderer.
+MisReportFormController.template = "mis_builder.FormView";
diff --git a/mis_builder/static/src/views/form/mis_report_form_controller.xml b/mis_builder/static/src/views/form/mis_report_form_controller.xml
new file mode 100644
index 000000000..0e45f4da9
--- /dev/null
+++ b/mis_builder/static/src/views/form/mis_report_form_controller.xml
@@ -0,0 +1,21 @@
+
+