1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
odoo.define('hr/static/src/models/partner/partner.js', function (require) {
'use strict';
const {
registerInstancePatchModel,
registerFieldPatchModel,
} = require('mail/static/src/model/model_core.js');
const { attr, one2one } = require('mail/static/src/model/model_field.js');
registerInstancePatchModel('mail.partner', 'hr/static/src/models/partner/partner.js', {
//--------------------------------------------------------------------------
// Public
//--------------------------------------------------------------------------
/**
* Checks whether this partner has a related employee and links them if
* applicable.
*/
async checkIsEmployee() {
await this.async(() => this.env.models['hr.employee'].performRpcSearchRead({
context: { active_test: false },
domain: [['user_partner_id', '=', this.id]],
fields: ['user_id', 'user_partner_id'],
}));
this.update({ hasCheckedEmployee: true });
},
/**
* When a partner is an employee, its employee profile contains more useful
* information to know who he is than its partner profile.
*
* @override
*/
async openProfile() {
// limitation of patch, `this._super` becomes unavailable after `await`
const _super = this._super.bind(this, ...arguments);
if (!this.employee && !this.hasCheckedEmployee) {
await this.async(() => this.checkIsEmployee());
}
if (this.employee) {
return this.employee.openProfile();
}
return _super();
},
});
registerFieldPatchModel('mail.partner', 'hr/static/src/models/partner/partner.js', {
/**
* Employee related to this partner. It is computed through
* the inverse relation and should be considered read-only.
*/
employee: one2one('hr.employee', {
inverse: 'partner',
}),
/**
* Whether an attempt was already made to fetch the employee corresponding
* to this partner. This prevents doing the same RPC multiple times.
*/
hasCheckedEmployee: attr({
default: false,
}),
});
});
|