262 lines
7.6 KiB
JavaScript
262 lines
7.6 KiB
JavaScript
import { DocumentsModels } from "@documents/../tests/helpers/data";
|
|
import {
|
|
defineSpreadsheetModels,
|
|
getBasicData as getBasicSpreadsheetData,
|
|
getBasicServerData as getBasicSpreadsheetServerData,
|
|
SpreadsheetModels,
|
|
} from "@spreadsheet/../tests/helpers/data";
|
|
import { defineActions, fields, models, onRpc, serverState } from "@web/../tests/web_test_helpers";
|
|
import { Domain } from "@web/core/domain";
|
|
|
|
const ACCESS_TOKEN_MY_SPREADSHEET = "accessTokenMyspreadsheet";
|
|
const {
|
|
IrEmbeddedActions,
|
|
MailActivityType,
|
|
MailAlias,
|
|
MailAliasDomain,
|
|
DocumentsTag,
|
|
DocumentsDocument: Documents,
|
|
} = DocumentsModels;
|
|
|
|
export class DocumentsDocument extends Documents {
|
|
spreadsheet_data = fields.Binary({ string: "Data" });
|
|
display_thumbnail = fields.Binary({ string: "Thumbnail" });
|
|
handler = fields.Selection({
|
|
string: "Handler",
|
|
selection: [
|
|
["spreadsheet", "Spreadsheet"],
|
|
["frozen_spreadsheet", "Frozen Spreadsheet"],
|
|
["frozen_folder", "Frozen Folder"],
|
|
],
|
|
});
|
|
|
|
get_spreadsheets(domain = [], args) {
|
|
let { offset, limit } = args;
|
|
offset = offset || 0;
|
|
|
|
const combinedDomain = Domain.and([domain, [["handler", "=", "spreadsheet"]]]).toList();
|
|
const records = this.env["documents.document"]
|
|
.search_read(combinedDomain)
|
|
.map((spreadsheet) => ({
|
|
display_name: spreadsheet.name,
|
|
id: spreadsheet.id,
|
|
}));
|
|
const sliced = records.slice(offset, limit ? offset + limit : undefined);
|
|
return { records: sliced, total: records.length };
|
|
}
|
|
|
|
dispatch_spreadsheet_message() {
|
|
return false;
|
|
}
|
|
|
|
action_open_new_spreadsheet(route, args) {
|
|
const spreadsheetId = this.env["documents.document"].create({
|
|
name: "Untitled spreadsheet",
|
|
mimetype: "application/o-spreadsheet",
|
|
spreadsheet_data: "{}",
|
|
handler: "spreadsheet",
|
|
});
|
|
return {
|
|
type: "ir.actions.client",
|
|
tag: "action_open_spreadsheet",
|
|
params: {
|
|
spreadsheet_id: spreadsheetId,
|
|
is_new_spreadsheet: true,
|
|
},
|
|
};
|
|
}
|
|
|
|
action_open_spreadsheet(args) {
|
|
return {
|
|
type: "ir.actions.client",
|
|
tag: "action_open_spreadsheet",
|
|
params: {
|
|
spreadsheet_id: args[0],
|
|
},
|
|
};
|
|
}
|
|
|
|
_records = [
|
|
{
|
|
id: 1,
|
|
name: "Folder1",
|
|
description: "Folder",
|
|
folder_id: false,
|
|
handler: false,
|
|
available_embedded_actions_ids: [],
|
|
type: "folder",
|
|
access_token: "accessTokenFolder1",
|
|
},
|
|
{
|
|
id: 2,
|
|
name: "My spreadsheet",
|
|
spreadsheet_data: "{}",
|
|
is_favorited: false,
|
|
folder_id: 1,
|
|
handler: "spreadsheet",
|
|
active: true,
|
|
access_token: ACCESS_TOKEN_MY_SPREADSHEET,
|
|
available_embedded_actions_ids: [],
|
|
},
|
|
{
|
|
id: 3,
|
|
name: "",
|
|
spreadsheet_data: "{}",
|
|
is_favorited: true,
|
|
folder_id: 1,
|
|
handler: "spreadsheet",
|
|
active: true,
|
|
access_token: "accessToken",
|
|
available_embedded_actions_ids: [],
|
|
},
|
|
];
|
|
}
|
|
|
|
export class SpreadsheetTemplate extends models.Model {
|
|
_name = "spreadsheet.template";
|
|
|
|
name = fields.Char({ string: "Name", type: "char" });
|
|
spreadsheet_data = fields.Binary({ string: "Spreadsheet Data" });
|
|
thumbnail = fields.Binary({ string: "Thumbnail", type: "binary" });
|
|
display_thumbnail = fields.Binary({ string: "Thumbnail" });
|
|
sequence = fields.Integer({ string: "Sequence", type: "integer" });
|
|
|
|
fetch_template_data(route, args) {
|
|
const [id] = args.args;
|
|
const record = this.env["spreadsheet.template"].search_read([["id", "=", id]])[0];
|
|
if (!record) {
|
|
throw new Error(`Spreadsheet Template ${id} does not exist`);
|
|
}
|
|
return {
|
|
data:
|
|
typeof record.spreadsheet_data === "string"
|
|
? JSON.parse(record.spreadsheet_data)
|
|
: record.spreadsheet_data,
|
|
name: record.name,
|
|
isReadonly: false,
|
|
};
|
|
}
|
|
|
|
has_access(right) {
|
|
return true;
|
|
}
|
|
|
|
_records = [
|
|
{ id: 1, name: "Template 1", spreadsheet_data: "" },
|
|
{ id: 2, name: "Template 2", spreadsheet_data: "" },
|
|
];
|
|
|
|
_views = {
|
|
search: /* xml */ `<search><field name="name"/></search>`,
|
|
};
|
|
}
|
|
|
|
onRpc(
|
|
"/spreadsheet/data/<string:res_model>/<int:res_id>",
|
|
function (_request, { res_model, res_id }) {
|
|
const fields = this.env[res_model]._fields;
|
|
const domain = [["id", "=", parseInt(res_id)]];
|
|
if ("active" in fields) {
|
|
domain.push(["active", "in", [true, false]]);
|
|
}
|
|
const [record] = this.env[res_model].search_read(domain);
|
|
return {
|
|
data: JSON.parse(record.spreadsheet_data),
|
|
name: record.name,
|
|
revisions: [],
|
|
isReadonly: false,
|
|
is_favorited: record.is_favorited,
|
|
is_archived: !record.active,
|
|
folder_id: record.folder_id?.[0],
|
|
};
|
|
}
|
|
);
|
|
|
|
export function defineDocumentSpreadsheetModels() {
|
|
const SpreadsheetDocumentModels = {
|
|
MailActivityType,
|
|
MailAlias,
|
|
MailAliasDomain,
|
|
DocumentsDocument,
|
|
DocumentsTag,
|
|
SpreadsheetTemplate,
|
|
IrEmbeddedActions,
|
|
};
|
|
Object.assign(SpreadsheetModels, SpreadsheetDocumentModels);
|
|
defineSpreadsheetModels();
|
|
}
|
|
|
|
export function defineDocumentSpreadsheetTestAction() {
|
|
defineActions([
|
|
{
|
|
id: 1,
|
|
name: "partner Action",
|
|
res_model: "partner",
|
|
xml_id: "spreadsheet.partner_action",
|
|
views: [
|
|
[false, "list"],
|
|
[false, "pivot"],
|
|
[false, "graph"],
|
|
[false, "search"],
|
|
[false, "form"],
|
|
],
|
|
},
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* @override to add necessary users
|
|
*/
|
|
export const getBasicData = () => {
|
|
const res = getBasicSpreadsheetData();
|
|
res["res.users"] = getDocumentBasicData().models["res.users"];
|
|
return res;
|
|
};
|
|
|
|
/**
|
|
* @override to add necessary users
|
|
*/
|
|
export const getBasicServerData = () => {
|
|
const res = getBasicSpreadsheetServerData();
|
|
res.models["res.users"] = getDocumentBasicData().models["res.users"];
|
|
return res;
|
|
};
|
|
|
|
export function getDocumentBasicData(views = {}) {
|
|
const models = {};
|
|
models["mail.alias"] = { records: [{ alias_name: "hazard@rmcf.es", id: 1 }] };
|
|
models["res.users"] = {
|
|
records: [
|
|
{ name: "OdooBot", id: serverState.odoobotId },
|
|
{
|
|
name: "Test User",
|
|
id: serverState.userId,
|
|
active: true,
|
|
partner_id: serverState.partnerId,
|
|
},
|
|
],
|
|
};
|
|
models["documents.document"] = {
|
|
records: [
|
|
{
|
|
name: "Folder 1",
|
|
alias_id: 1,
|
|
description: "Folder",
|
|
type: "folder",
|
|
id: 1,
|
|
available_embedded_actions_ids: [],
|
|
},
|
|
],
|
|
};
|
|
models["spreadsheet.template"] = {
|
|
records: [
|
|
{ id: 1, name: "Template 1", spreadsheet_data: "{}" },
|
|
{ id: 2, name: "Template 2", spreadsheet_data: "{}" },
|
|
],
|
|
};
|
|
return {
|
|
models,
|
|
views,
|
|
};
|
|
}
|