1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- /** @odoo-module **/
- import '@im_livechat/../tests/helpers/mock_server'; // ensure mail overrides are applied first
- import { patch } from "@web/core/utils/patch";
- import { MockServer } from "@web/../tests/helpers/mock_server";
- patch(MockServer.prototype, 'website_livechat', {
- /**
- * @override
- */
- async _performRPC(route, args) {
- if (route === '/web/dataset/call_button') {
- return this._mockCallButton(args);
- }
- return this._super(route, args);
- },
- /**
- * Simulate a 'call_button' operation from a view.
- *
- * @override
- */
- _mockCallButton({ args, kwargs, method, model }) {
- if (model === 'website.visitor' && method === 'action_send_chat_request') {
- return this._mockWebsiteVisitorActionSendChatRequest(args[0]);
- }
- return this._super(...arguments);
- },
- /**
- * Overrides to add visitor information to livechat channels.
- *
- * @override
- */
- _mockMailChannelChannelInfo(ids) {
- const channelInfos = this._super(...arguments);
- for (const channelInfo of channelInfos) {
- const channel = this.getRecords('mail.channel', [['id', '=', channelInfo.id]])[0];
- if (channel.channel_type === 'livechat' && channelInfo.livechat_visitor_id) {
- const visitor = this.getRecords('website.visitor', [['id', '=', channelInfo.livechat_visitor_id]])[0];
- const country = this.getRecords('res.country', [['id', '=', visitor.country_id]])[0];
- channelInfo.visitor = {
- country_code: country && country.code,
- country_id: country && country.id,
- display_name: visitor.display_name,
- history: visitor.history, // TODO should be computed
- id: visitor.id,
- is_connected: visitor.is_connected,
- lang_name: visitor.lang_name,
- partner_id: visitor.partner_id,
- website_name: visitor.website_name,
- };
- }
- }
- return channelInfos;
- },
- /**
- * @private
- * @param {integer[]} ids
- */
- _mockWebsiteVisitorActionSendChatRequest(ids) {
- const visitors = this.getRecords('website.visitor', [['id', 'in', ids]]);
- for (const visitor of visitors) {
- const country = visitor.country_id
- ? this.getRecords('res.country', [['id', '=', visitor.country_id]])
- : undefined;
- const visitor_name = `${visitor.display_name}${country ? `(${country.name})` : ''}`;
- const membersToAdd = [[0, 0, { partner_id: this.currentPartnerId }]];
- if (visitor.partner_id) {
- membersToAdd.push([0, 0, { partner_id: visitor.partner_id }]);
- } else {
- membersToAdd.push([0, 0, { partner_id: this.publicPartnerId }]);
- }
- const livechatId = this.pyEnv['mail.channel'].create({
- anonymous_name: visitor_name,
- channel_member_ids: membersToAdd,
- channel_type: 'livechat',
- livechat_operator_id: this.currentPartnerId,
- });
- // notify operator
- this.pyEnv['bus.bus']._sendone(this.currentPartner, 'website_livechat.send_chat_request',
- this._mockMailChannelChannelInfo([livechatId])[0]
- );
- }
- },
- });
|