Files
odoo_source/addons/spreadsheet/static/tests/utils/pivot.js
T
Pierre Rousseau 5ff5bb686c [IMP] spreadsheet: include first row grouping at insertion
With this revision, the label of the field of the first row groupby is
inserted as the row title.

Task-id 2901960

closes odoo/odoo#107220

Related: odoo/enterprise#37395
Signed-off-by: Rémi Rahir (rar) <rar@odoo.com>
2023-02-23 10:30:56 +01:00

77 lines
2.4 KiB
JavaScript

/** @odoo-module */
import { PivotArchParser } from "@web/views/pivot/pivot_arch_parser";
import { nextTick } from "@web/../tests/helpers/utils";
import PivotDataSource from "@spreadsheet/pivot/pivot_data_source";
import { getBasicServerData } from "./data";
import { createModelWithDataSource, waitForDataSourcesLoaded } from "./model";
/** @typedef {import("@spreadsheet/o_spreadsheet/o_spreadsheet").Model} Model */
/**
* @param {Model} model
* @param {object} params
* @param {string} params.arch
* @param {[number, number]} [params.anchor]
*/
export async function insertPivotInSpreadsheet(model, params) {
const archInfo = new PivotArchParser().parse(params.arch);
const definition = {
metaData: {
colGroupBys: archInfo.colGroupBys,
rowGroupBys: archInfo.rowGroupBys,
activeMeasures: archInfo.activeMeasures,
resModel: "partner",
},
searchParams: {
domain: [],
context: {},
groupBy: [],
orderBy: [],
},
name: "Partner Pivot",
};
const dataSource = model.config.custom.dataSources.create(PivotDataSource, definition);
await dataSource.load();
const { cols, rows, measures, rowTitle } = dataSource.getTableStructure().export();
const table = {
cols,
rows,
measures,
rowTitle,
};
const [col, row] = params.anchor || [0, 0];
model.dispatch("INSERT_PIVOT", {
id: model.getters.getNextPivotId(),
sheetId: model.getters.getActiveSheetId(),
col,
row,
table,
dataSourceId: "pivotData1",
definition,
});
await nextTick();
}
/**
* @param {object} params
* @param {string} [params.arch]
* @param {object} [params.serverData]
* @param {function} [params.mockRPC]
* @returns {Promise<{ model: Model, env: object}>}
*/
export async function createSpreadsheetWithPivot(params = {}) {
const serverData = params.serverData || getBasicServerData();
const model = await createModelWithDataSource({
mockRPC: params.mockRPC,
serverData: params.serverData,
});
const arch = params.arch || serverData.views["partner,false,pivot"];
await insertPivotInSpreadsheet(model, { arch });
const env = model.config.custom.env;
env.model = model;
await waitForDataSourcesLoaded(model);
return { model, env };
}