56 lines
2.0 KiB
JavaScript
56 lines
2.0 KiB
JavaScript
import { _t } from "@web/core/l10n/translation";
|
|
import { Store } from "@mail/core/common/store_service";
|
|
import { patch } from "@web/core/utils/patch";
|
|
|
|
/** @type {import("models").Store} */
|
|
const storeServicePatch = {
|
|
setup() {
|
|
super.setup();
|
|
this.employees = {};
|
|
},
|
|
async getChat(person) {
|
|
const { employeeId } = person;
|
|
if (!employeeId) {
|
|
return super.getChat(person);
|
|
}
|
|
let employee = this.employees[employeeId];
|
|
if (!employee) {
|
|
this.employees[employeeId] = { id: employeeId };
|
|
employee = this.employees[employeeId];
|
|
}
|
|
if (!employee.user_id && !employee.hasCheckedUser) {
|
|
employee.hasCheckedUser = true;
|
|
const [employeeData] = await this.env.services.orm.silent.read(
|
|
"hr.employee.public",
|
|
[employee.id],
|
|
["user_id", "user_partner_id"],
|
|
{ context: { active_test: false } }
|
|
);
|
|
if (employeeData) {
|
|
employee.user_id = employeeData.user_id[0];
|
|
let user = this.users[employee.user_id];
|
|
if (!user) {
|
|
this.users[employee.user_id] = { id: employee.user_id };
|
|
user = this.users[employee.user_id];
|
|
}
|
|
user.partner_id = employeeData.user_partner_id[0];
|
|
this.Persona.insert({
|
|
displayName: employeeData.user_partner_id[1],
|
|
id: employeeData.user_partner_id[0],
|
|
type: "partner",
|
|
});
|
|
}
|
|
}
|
|
if (!employee.user_id) {
|
|
this.env.services.notification.add(
|
|
_t("You can only chat with employees that have a dedicated user."),
|
|
{ type: "info" }
|
|
);
|
|
return;
|
|
}
|
|
return super.getChat({ userId: employee.user_id });
|
|
},
|
|
};
|
|
|
|
patch(Store.prototype, storeServicePatch);
|