From e75e9b23bcb1551a19d4c3401a0f7dd1ab0f877f Mon Sep 17 00:00:00 2001
From: Carlos Roca <carlos.roca@tecnativa.com>
Date: Tue, 9 May 2023 08:31:42 +0200
Subject: [PATCH] [FIX] web_pivot_computed_measure: Error when using filter
 created with favorites

---
 web_pivot_computed_measure/__manifest__.py    |  2 +-
 .../static/src/pivot/pivot_model.esm.js       | 44 ++++++++++++++++++-
 .../static/src/pivot/pivot_view.esm.js        | 20 +++++++++
 3 files changed, 64 insertions(+), 2 deletions(-)
 create mode 100644 web_pivot_computed_measure/static/src/pivot/pivot_view.esm.js

diff --git a/web_pivot_computed_measure/__manifest__.py b/web_pivot_computed_measure/__manifest__.py
index c6d618203..d18096526 100644
--- a/web_pivot_computed_measure/__manifest__.py
+++ b/web_pivot_computed_measure/__manifest__.py
@@ -3,7 +3,7 @@
 {
     "name": "Web Pivot Computed Measure",
     "category": "web",
-    "version": "15.0.1.0.0",
+    "version": "15.0.1.0.1",
     "author": "Tecnativa, Odoo Community Association (OCA)",
     "license": "AGPL-3",
     "website": "https://github.com/OCA/web",
diff --git a/web_pivot_computed_measure/static/src/pivot/pivot_model.esm.js b/web_pivot_computed_measure/static/src/pivot/pivot_model.esm.js
index f6833784d..d067b2d76 100644
--- a/web_pivot_computed_measure/static/src/pivot/pivot_model.esm.js
+++ b/web_pivot_computed_measure/static/src/pivot/pivot_model.esm.js
@@ -135,7 +135,7 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", {
      */
     _fillComputedMeasuresData(subGroupData) {
         for (const cm of this._computed_measures) {
-            if (!this._isMeasureEnabled(cm.id)) return;
+            if (!this._isMeasureEnabled(cm.id)) continue;
             if (subGroupData.__count === 0) {
                 subGroupData[cm.id] = false;
             } else {
@@ -235,4 +235,46 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", {
         }
         return this._super(...arguments);
     },
+    /**
+     * Load the measures added to selected favorite filters
+     *
+     * @override
+     */
+    async load(searchParams) {
+        var _super = this._super.bind(this);
+        if ("context" in searchParams) {
+            this._computed_measures =
+                searchParams.context.pivot_computed_measures ||
+                searchParams.computed_measures ||
+                [];
+        }
+        for (const cmDef of this._computed_measures) {
+            if (this._isMeasureEnabled(cmDef.id)) {
+                continue;
+            }
+            await this._createVirtualMeasure(cmDef);
+        }
+        const fieldNames = Object.keys(this.metaData.fields);
+        for (const fieldName of fieldNames) {
+            const field = this.metaData.fields[fieldName];
+            if (field.__computed_id) {
+                const cm = _.find(this._computed_measures, {
+                    id: field.__computed_id,
+                });
+                if (!cm) {
+                    delete this.metaData.fields[fieldName];
+                    delete this.metaData.measures[fieldName];
+                    this.metaData.activeMeasures = _.without(
+                        this.metaData.activeMeasures,
+                        fieldName
+                    );
+                    const config = {metaData: this.metaData, data: this.data};
+                    this._loadData(config).then(() => {
+                        this.notify();
+                    });
+                }
+            }
+        }
+        return _super(...arguments);
+    },
 });
diff --git a/web_pivot_computed_measure/static/src/pivot/pivot_view.esm.js b/web_pivot_computed_measure/static/src/pivot/pivot_view.esm.js
new file mode 100644
index 000000000..5242dbe11
--- /dev/null
+++ b/web_pivot_computed_measure/static/src/pivot/pivot_view.esm.js
@@ -0,0 +1,20 @@
+/** @odoo-module **/
+/* Copyright 2022 Tecnativa - Carlos Roca
+ * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) */
+
+import {PivotView} from "@web/views/pivot/pivot_view";
+import {patch} from "web.utils";
+
+patch(PivotView.prototype, "web_pivot_computed_measure.PivotView", {
+    /**
+     * Add computed_measures to context key to avoid loosing info when saving the
+     * filter to favorites.
+     *
+     * @override
+     */
+    getContext() {
+        var res = this._super(...arguments);
+        res.pivot_computed_measures = this.model._computed_measures;
+        return res;
+    },
+});