From 8755d63834a4ad3701016613bbc5aaadb047e69a Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Thu, 18 May 2023 08:42:32 +0200 Subject: [PATCH 1/3] [FIX] web_pivot_computed_measure: Not found measures whan changing to pivot view --- .../static/src/pivot/pivot_model.esm.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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 d067b2d76..3eb2e8666 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 @@ -5,6 +5,7 @@ import {PivotModel} from "@web/views/pivot/pivot_model"; import {patch} from "web.utils"; +import {computeReportMeasures} from "@web/views/helpers/utils"; patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { /** @@ -242,6 +243,17 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { */ async load(searchParams) { var _super = this._super.bind(this); + if (!this.metaData.measures) { + const metaData = this._buildMetaData(); + metaData.measures = computeReportMeasures( + metaData.fields, + metaData.fieldAttrs, + metaData.activeMeasures, + metaData.additionalMeasures + ); + const config = {metaData, data: this.data}; + await this._loadData(config); + } if ("context" in searchParams) { this._computed_measures = searchParams.context.pivot_computed_measures || From 87346ebe1c3e94e151494b4412f674aece2d9739 Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Mon, 22 May 2023 12:06:27 +0200 Subject: [PATCH 2/3] [FIX] web_pivot_computed_measure: Use config instead of perform loadData --- .../static/src/pivot/pivot_model.esm.js | 39 ++++++++++--------- 1 file changed, 21 insertions(+), 18 deletions(-) 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 3eb2e8666..e7172b1bd 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 @@ -73,6 +73,11 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { * @returns a promise */ _createVirtualMeasure(cmDef, fields) { + this._createVirtualField(cmDef, fields); + // Activate computed field + return this.toggleMeasure(cmDef.id); + }, + _createVirtualField(cmDef, fields, config) { const arrFields = fields || this.metaData.fields; // This is a minimal 'fake' field info arrFields[cmDef.id] = { @@ -88,11 +93,9 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { // Operator used for group the measure added. group_operator: "sum", }; - this.metaData.measures[cmDef.id] = arrFields[cmDef.id]; - // Activate computed field - return this.toggleMeasure(cmDef.id); + const metaData = (config && config.metaData) || this.metaData; + metaData.measures[cmDef.id] = arrFields[cmDef.id]; }, - /** * Active the measures related to the 'fake' field * @@ -124,8 +127,12 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { * @private * @param {String} field */ - _isMeasureEnabled(field) { - return _.contains(this.metaData.activeMeasures, field); + _isMeasureEnabled(field, config) { + const activeMeasures = + (config && config.metaData.activeMeasures) || + this.metaData.activeMeasures || + []; + return _.contains(activeMeasures, field); }, /** @@ -134,9 +141,9 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { * @private * @param {Object} subGroupData */ - _fillComputedMeasuresData(subGroupData) { + _fillComputedMeasuresData(subGroupData, config) { for (const cm of this._computed_measures) { - if (!this._isMeasureEnabled(cm.id)) continue; + if (!this._isMeasureEnabled(cm.id, config)) continue; if (subGroupData.__count === 0) { subGroupData[cm.id] = false; } else { @@ -151,10 +158,10 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { * * @override */ - _prepareData(group, groupSubdivisions) { + _prepareData(group, groupSubdivisions, config) { for (const groupSubdivision of groupSubdivisions) { for (const subGroup of groupSubdivision.subGroups) { - this._fillComputedMeasuresData(subGroup); + this._fillComputedMeasuresData(subGroup, config); } } this._super(...arguments); @@ -243,6 +250,7 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { */ async load(searchParams) { var _super = this._super.bind(this); + var config = {metaData: this.metaData, data: this.data}; if (!this.metaData.measures) { const metaData = this._buildMetaData(); metaData.measures = computeReportMeasures( @@ -251,8 +259,7 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { metaData.activeMeasures, metaData.additionalMeasures ); - const config = {metaData, data: this.data}; - await this._loadData(config); + config = {metaData, data: this.data}; } if ("context" in searchParams) { this._computed_measures = @@ -261,10 +268,10 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { []; } for (const cmDef of this._computed_measures) { - if (this._isMeasureEnabled(cmDef.id)) { + if (this._isMeasureEnabled(cmDef.id, config)) { continue; } - await this._createVirtualMeasure(cmDef); + await this._createVirtualField(cmDef, undefined, config); } const fieldNames = Object.keys(this.metaData.fields); for (const fieldName of fieldNames) { @@ -280,10 +287,6 @@ patch(PivotModel.prototype, "web_pivot_computed_measure.PivotModel", { this.metaData.activeMeasures, fieldName ); - const config = {metaData: this.metaData, data: this.data}; - this._loadData(config).then(() => { - this.notify(); - }); } } } From d41d38702ba9118746b6c9e5571882ee38a0cb0e Mon Sep 17 00:00:00 2001 From: Carlos Roca Date: Wed, 7 Jun 2023 10:21:05 +0200 Subject: [PATCH 3/3] [FIX] web_pivot_computed_measure: Error when computed measure takes Infinity value --- .../static/src/pivot/pivot_renderer.esm.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 web_pivot_computed_measure/static/src/pivot/pivot_renderer.esm.js diff --git a/web_pivot_computed_measure/static/src/pivot/pivot_renderer.esm.js b/web_pivot_computed_measure/static/src/pivot/pivot_renderer.esm.js new file mode 100644 index 000000000..d3a0e9c7b --- /dev/null +++ b/web_pivot_computed_measure/static/src/pivot/pivot_renderer.esm.js @@ -0,0 +1,15 @@ +/** @odoo-module **/ +/* Copyright 2022 Tecnativa - Carlos Roca + * License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html) */ + +import {PivotRenderer} from "@web/views/pivot/pivot_renderer"; +import {patch} from "web.utils"; + +patch(PivotRenderer.prototype, "web_pivot_computed_measure.PivotRenderer", { + getFormattedValue(cell) { + if (cell.value === Infinity) { + return "-"; + } + return this._super(...arguments); + }, +});