82 lines
2.5 KiB
JavaScript
82 lines
2.5 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: params.resModel || "partner",
|
|
},
|
|
searchParams: {
|
|
domain: [],
|
|
context: {},
|
|
groupBy: [],
|
|
orderBy: [],
|
|
},
|
|
name: "Partner Pivot",
|
|
};
|
|
const pivotId = model.getters.getNextPivotId();
|
|
const dataSourceId = model.getters.getPivotDataSourceId(pivotId);
|
|
const dataSource = model.config.custom.dataSources.add(
|
|
dataSourceId,
|
|
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,
|
|
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 };
|
|
}
|