115 lines
3.0 KiB
JavaScript
115 lines
3.0 KiB
JavaScript
import { defineModels, fields, models, onRpc } from "@web/../tests/web_test_helpers";
|
|
import { SpreadsheetMixin } from "@spreadsheet/../tests/helpers/data";
|
|
|
|
export class SaleOrder extends models.Model {
|
|
_name = "sale.order";
|
|
|
|
_records = [{ id: 1 }];
|
|
}
|
|
|
|
export class SaleOrderLine extends models.Model {
|
|
_name = "sale.order.line";
|
|
|
|
name = fields.Char();
|
|
order_id = fields.Many2one({ relation: "sale.order" });
|
|
product_id = fields.Many2one({ relation: "product" });
|
|
product_uom_qty = fields.Float();
|
|
qty_delivered = fields.Float();
|
|
|
|
_records = [{ id: 1, order_id: 1, product_id: 1 }];
|
|
}
|
|
|
|
export class Product extends models.Model {
|
|
_name = "product";
|
|
|
|
name = fields.Char();
|
|
|
|
_records = [{ id: 1, name: "Chair" }];
|
|
}
|
|
|
|
export class SaleOrderSpreadsheet extends SpreadsheetMixin {
|
|
_name = "sale.order.spreadsheet";
|
|
|
|
name = fields.Char();
|
|
order_id = fields.Many2one({ relation: "sale.order" });
|
|
|
|
_records = [
|
|
{
|
|
id: 1,
|
|
name: "My sale order spreadsheet",
|
|
order_id: 1,
|
|
spreadsheet_data: JSON.stringify(getSaleOrderSpreadsheetData()),
|
|
},
|
|
];
|
|
|
|
dispatch_spreadsheet_message() {}
|
|
}
|
|
|
|
export function defineSpreadsheetSaleModels() {
|
|
onRpc(
|
|
"/spreadsheet/data/<string:res_model>/<int:res_id>",
|
|
function (_request, { res_model, res_id }) {
|
|
const [spreadsheet] = this.env[res_model].browse(parseInt(res_id));
|
|
const [order] = this.env["sale.order"].browse(spreadsheet.order_id);
|
|
return {
|
|
data: JSON.parse(spreadsheet.spreadsheet_data),
|
|
name: spreadsheet.name,
|
|
revisions: [],
|
|
isReadonly: false,
|
|
order_id: order?.id,
|
|
order_display_name: order?.display_name,
|
|
};
|
|
}
|
|
);
|
|
defineModels({
|
|
SaleOrder,
|
|
Product,
|
|
SaleOrderLine,
|
|
SaleOrderSpreadsheet,
|
|
});
|
|
}
|
|
|
|
const SALE_ORDER_LINE_FIELDS = [
|
|
"product_id",
|
|
"product_uom_qty",
|
|
"qty_delivered",
|
|
"qty_invoiced",
|
|
"qty_to_invoice",
|
|
"product_uom_id",
|
|
"price_unit",
|
|
"price_tax",
|
|
"price_subtotal",
|
|
];
|
|
|
|
export function getSaleOrderSpreadsheetData() {
|
|
return {
|
|
revisionId: "START_REVISION",
|
|
sheets: [{ id: "sheet1" }],
|
|
lists: {
|
|
1: {
|
|
columns: SALE_ORDER_LINE_FIELDS,
|
|
domain: [],
|
|
model: "sale.order.line",
|
|
context: {},
|
|
orderBy: [],
|
|
id: "1",
|
|
name: "Sale order lines",
|
|
fieldMatching: {
|
|
order_filter_id: {
|
|
chain: "order_id",
|
|
type: "many2one",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
globalFilters: [
|
|
{
|
|
id: "order_filter_id",
|
|
type: "relation",
|
|
label: "Sales Order",
|
|
modelName: "sale.order",
|
|
},
|
|
],
|
|
};
|
|
}
|