97 lines
2.8 KiB
JavaScript
97 lines
2.8 KiB
JavaScript
/* @odoo-module */
|
|
|
|
import { _t } from "@web/core/l10n/translation";
|
|
import { registry } from "@web/core/registry";
|
|
import { user } from "@web/core/user";
|
|
import { useService } from "@web/core/utils/hooks";
|
|
import { patch } from "@web/core/utils/patch";
|
|
import { KanbanHeader } from "@web/views/kanban/kanban_header";
|
|
import { TRIGGER_FILTERS } from "./utils";
|
|
|
|
const SUPPORTED_TRIGGERS = [
|
|
"on_stage_set",
|
|
"on_tag_set",
|
|
"on_state_set",
|
|
"on_priority_set",
|
|
"on_user_set",
|
|
"on_archive",
|
|
];
|
|
|
|
function enrichContext(context, group) {
|
|
const { displayName, groupByField, value } = group;
|
|
const { name, relation, type: ttype } = groupByField;
|
|
for (const trigger of SUPPORTED_TRIGGERS) {
|
|
if (!TRIGGER_FILTERS[trigger]({ name, relation, ttype })) {
|
|
continue;
|
|
}
|
|
switch (trigger) {
|
|
case "on_stage_set":
|
|
return {
|
|
...context,
|
|
default_trigger: trigger,
|
|
default_name: _t('Stage is set to "%s"', displayName),
|
|
default_trg_field_ref: value,
|
|
};
|
|
case "on_tag_set":
|
|
return {
|
|
...context,
|
|
default_trigger: trigger,
|
|
default_name: _t('"%s" tag is added', displayName),
|
|
default_trg_field_ref: value,
|
|
};
|
|
default:
|
|
return { ...context, default_trigger: trigger };
|
|
}
|
|
}
|
|
|
|
// Default trigger
|
|
return { ...context, default_trigger: "on_create_or_write" };
|
|
}
|
|
|
|
patch(KanbanHeader.prototype, {
|
|
setup() {
|
|
super.setup();
|
|
this.action = useService("action");
|
|
},
|
|
|
|
/**
|
|
* @override
|
|
*/
|
|
get permissions() {
|
|
const permissions = super.permissions;
|
|
Object.defineProperty(permissions, "canEditAutomations", {
|
|
get: () => user.isAdmin,
|
|
configurable: true,
|
|
});
|
|
return permissions;
|
|
},
|
|
|
|
async openAutomations() {
|
|
return this._openAutomations();
|
|
},
|
|
|
|
async _openAutomations() {
|
|
const domain = [["model", "=", this.props.list.resModel]];
|
|
const modelId = await this.orm.search("ir.model", domain, { limit: 1 });
|
|
const context = {
|
|
active_test: false,
|
|
default_model_id: modelId[0],
|
|
search_default_model_id: modelId[0],
|
|
};
|
|
this.action.doAction("base_automation.base_automation_act", {
|
|
additionalContext: enrichContext(context, this.group),
|
|
});
|
|
},
|
|
});
|
|
|
|
registry.category("kanban_header_config_items").add(
|
|
"open_automations",
|
|
{
|
|
label: _t("Automations"),
|
|
method: "openAutomations",
|
|
isVisible: ({ permissions }) => permissions.canEditAutomations,
|
|
class: "o_column_automations",
|
|
},
|
|
{ sequence: 25, force: true }
|
|
);
|