oca-ocb-accounting/odoo-bringout-oca-ocb-account/account/static/src/components/x2many_buttons/x2many_buttons.js
Ernad Husremovic 768b70e05e 19.0 vanilla
2026-03-09 09:30:07 +01:00

58 lines
1.9 KiB
JavaScript

import { _t } from "@web/core/l10n/translation";
import { standardFieldProps } from "@web/views/fields/standard_field_props";
import { registry } from "@web/core/registry";
import { useService } from "@web/core/utils/hooks";
import { Component } from "@odoo/owl";
class X2ManyButtons extends Component {
static template = "account.X2ManyButtons";
static props = {
...standardFieldProps,
treeLabel: { type: String },
nbRecordsShown: { type: Number, optional: true },
};
setup() {
this.orm = useService("orm");
this.action = useService("action");
}
async openTreeAndDiscard() {
const ids = this.currentField.currentIds;
await this.props.record.discard();
const context = this.currentField.resModel === "account.move"
? { list_view_ref: "account.view_duplicated_moves_tree_js" }
: {};
this.action.doAction({
name: this.props.treeLabel,
type: "ir.actions.act_window",
res_model: this.currentField.resModel,
views: [
[false, "list"],
[false, "form"],
],
domain: [["id", "in", ids]],
context: context,
});
}
async openFormAndDiscard(id) {
const action = await this.orm.call(this.currentField.resModel, "action_open_business_doc", [id], {});
await this.props.record.discard();
this.action.doAction(action);
}
get currentField() {
return this.props.record.data[this.props.name];
}
}
X2ManyButtons.template = "account.X2ManyButtons";
registry.category("fields").add("x2many_buttons", {
component: X2ManyButtons,
relatedFields: [{ name: "display_name", type: "char" }],
extractProps: ({ attrs, string }) => ({
treeLabel: string || _t("Records"),
nbRecordsShown: attrs.nb_records_shown ? parseInt(attrs.nb_records_shown) : 3,
}),
});