diff --git a/addons/spreadsheet/static/src/pivot/plugins/pivot_ui_plugin.js b/addons/spreadsheet/static/src/pivot/plugins/pivot_ui_plugin.js index dffddb39f52..4749805dba0 100644 --- a/addons/spreadsheet/static/src/pivot/plugins/pivot_ui_plugin.js +++ b/addons/spreadsheet/static/src/pivot/plugins/pivot_ui_plugin.js @@ -9,7 +9,8 @@ import { globalFiltersFieldMatchers } from "@spreadsheet/global_filters/plugins/ import { PivotDataSource } from "../pivot_data_source"; import { pivotTimeAdapter } from "../pivot_time_adapters"; -const { astToFormula } = spreadsheet; +const { astToFormula, helpers } = spreadsheet; +const { formatValue } = helpers; const { DateTime } = luxon; /** @@ -317,6 +318,23 @@ export class PivotUIPlugin extends spreadsheet.UIPlugin { return dataSource.computeOdooPivotHeaderValue(domainArgs); } + /** + * High level method computing the formatted result of ODOO.PIVOT.HEADER functions. + * + * @param {string} pivotId + * @param {(string | number)[]} pivotArgs arguments of the function (except the first one which is the pivot id) + */ + getPivotHeaderFormattedValue(pivotId, pivotArgs) { + const dataSource = this.getters.getPivotDataSource(pivotId); + const value = dataSource.computeOdooPivotHeaderValue(pivotArgs); + if (typeof value === "string") { + return value; + } + const format = this.getPivotFieldFormat(pivotId, pivotArgs.at(-2)); + const locale = this.getters.getLocale(); + return formatValue(value, { format, locale }); + } + getPivotFieldFormat(pivotId, fieldName) { const dataSource = this.getPivotDataSource(pivotId); const { field, aggregateOperator } = dataSource.parseGroupField(fieldName); @@ -547,6 +565,7 @@ PivotUIPlugin.getters = [ "getSelectedPivotId", "getPivotComputedDomain", "computeOdooPivotHeaderValue", + "getPivotHeaderFormattedValue", "getPivotFieldFormat", "getPivotIdFromPosition", "getPivotCellValue",