Javascript Odoo opportunity新邮件取消选中收件人

Javascript Odoo opportunity新邮件取消选中收件人,javascript,python,crm,odoo,odoo-10,Javascript,Python,Crm,Odoo,Odoo 10,在Odoo中,当我从“我的渠道”打开一个opportunity并在该opportunity上按下“New message”(新消息)按钮时,该opportunity的客户(以及该opportunity的追随者)将显示为该消息的接收者: 在该邮件的收件人列表中,该客户的姓名旁边有一个选中的复选框 这是因为文件addons/mail/static/src/xml/chatter.xml包含以下内容: <!-- List of followers -->

在Odoo中,当我从“我的渠道”打开一个opportunity并在该opportunity上按下“New message”(新消息)按钮时,该opportunity的客户(以及该opportunity的追随者)将显示为该消息的接收者:

在该邮件的收件人列表中,该客户的姓名旁边有一个选中的复选框

这是因为文件
addons/mail/static/src/xml/chatter.xml
包含以下内容:

 <!-- List of followers -->
                <div class="o_composer_suggested_partners">
                    <t t-foreach='widget.suggested_partners' t-as='recipient'>
                        <div t-attf-title="Add as recipient and follower (reason: #{recipient.reason})">
                            <input type="checkbox"
                                   t-att-checked="recipient.checked ? 'checked' : undefined"
                                   t-att-data-fullname="recipient.full_name"/>
                            <t t-esc="recipient.name"/>
                            <t t-if="recipient.email_address">(<t t-esc="recipient.email_address"/>)</t>
                        </div>
                    </t>
                </div>
addons/mail/static/src/js/chatter.js

message_get_suggested_recipients: function () {
    var self = this;
    var email_addresses = _.pluck(this.suggested_partners, 'email_address');
    return this.thread_dataset
        .call('message_get_suggested_recipients', [[this.context.default_res_id], this.context])
        .done(function (suggested_recipients) {
            var thread_recipients = suggested_recipients[self.context.default_res_id];
            _.each(thread_recipients, function (recipient) {
                var parsed_email = utils.parse_email(recipient[1]);
                if (_.indexOf(email_addresses, parsed_email[1]) === -1) {
                    self.suggested_partners.push({
                        checked: true,
                        partner_id: recipient[0],
                        full_name: recipient[1],
                        name: parsed_email[0],
                        email_address: parsed_email[1],
                        reason: recipient[2],
                    });
                }
            });
        });
},
是否有一种方法可以使客户在默认情况下不勾选复选框

对吗

  • 将"消息"添加"建议的"收件人(在crm\u lead.py中)修改为 包含“checked”=合作伙伴为False

  • 修改邮件\u获取\u建议的\u收件人(在
    chatter.js
    中)以接受检查 参数
    recipient
    中的值,而不是默认设置为
    true
    选中:true


  • 在模块中的
    /static/src/xml/chatter.xml
    中创建一个包含以下内容的文件:

    
    
    然后在清单中调用此文件:

    {
    #姓名、作者。。。
    “qweb”:[
    'static/src/xml/chatter.xml'
    ],
    }
    
    注意:这将改变奥多所有聊天的行为。它仅针对v10进行了测试。

    在对CZoellner先生提供的进行了修补之后。谢谢!:)

    我想出了一个解决办法:就是不知道如何将它打包为一个插件

    请参见注释行,这些行已更改

    更改
    addons/mail/static/src/js/chatter.js

    message_get_suggested_recipients: function () {
        var self = this;
        var email_addresses = _.pluck(this.suggested_partners, 'email_address');
        return this.thread_dataset
            .call('message_get_suggested_recipients', [[this.context.default_res_id], this.context])
            .done(function (suggested_recipients) {
                var thread_recipients = suggested_recipients[self.context.default_res_id];
                _.each(thread_recipients, function (recipient) {
                    var parsed_email = utils.parse_email(recipient[1]);
                    if (_.indexOf(email_addresses, parsed_email[1]) === -1) {
                        self.suggested_partners.push({
                            checked: true,
                            partner_id: recipient[0],
                            full_name: recipient[1],
                            name: parsed_email[0],
                            email_address: parsed_email[1],
                            reason: recipient[2],
                        });
                    }
                });
            });
    },
    
    消息\u获取\u建议的\u收件人:函数(){
    var self=这个;
    var email_address=u.pull(this.suggered_partners,'email_address');
    返回此.thread\u数据集
    .call('message\u get\u suggered\u recipients',[[this.context.default\u res\u id],this.context])
    .done(功能(建议的收件人){
    var thread_recipients=建议的_recipients[self.context.default_res_id];
    _.每个(线程)收件人,函数(收件人){
    var parsed_email=utils.parse_email(收件人[1]);
    if(u.indexOf(电子邮件地址,解析的电子邮件[1])=-1){
    自我推荐推送({
    //核对:对,
    选中:收件人[3]| |正确,
    合作伙伴id:收件人[0],
    全名:收件人[1],
    名称:已解析的_电子邮件[0],
    电子邮件地址:已解析的电子邮件[1],
    原因:收件人[2],
    });
    }
    });
    });
    },
    
  • 并更改此文件
    addons/mail/models/mail\u thread.py
  • @api.multi
    定义消息添加建议收件人(自我、结果、合作伙伴=无、电子邮件=无、原因=“”):
    “”“由邮件调用\u获取\u建议的\u收件人,以添加建议的收件人”
    结果字典中的收件人。格式为:
    合作伙伴id、合作伙伴名称或合作伙伴名称、原因“”
    self.sure_one()
    如果发送电子邮件而不是合作伙伴:
    #从电子邮件中获取合作伙伴信息
    partner_info=self.message_partner_info_from_email([email])[0]
    如果合作伙伴信息获取(“合作伙伴id”):
    partner=self.env['res.partner'].sudo()。浏览([partner_info['partner_id']])[0]
    如果结果[self.ids[0]]中的val在[val[1]中发送电子邮件和电子邮件:#已存在电子邮件->跳过
    返回结果
    如果self.message_partner_id:#收件人已在关注者中->跳过
    返回结果
    如果[val[0]中的partner和partner.id用于结果[self.id[0]]中的val:#已存在的partner id->skip
    返回结果
    if partner和partner.email:#完整配置文件:id、姓名
    #结果[self.id[0]].append((partner.id,“%s%”(partner.name,partner.email),原因))
    结果[self.id[0]].append((partner.id,“%s%”(partner.name,partner.email),reason,False))
    elif合作伙伴:#不完整的配置文件:id、名称
    结果[self.id[0]].append((partner.id,“%s%”(partner.name),原因))
    else:#未知合作伙伴,我们可能正在管理电子邮件地址
    结果[self.ids[0]].append((False,email,reason))
    返回结果
    
    而且成功了

    为了使其成为Odoo中的插件,我创建了具有以下内容的插件:

    清单.py

    # -*- coding: utf-8 -*-
    {
       ...omitted for brewity...
        'depends': ['base','crm','mail'],
    
        'data': [
            'views/chatter.xml'
        ]
       ...omitted for brewity...
    }
    
    static/src/js/chatter.js

    odoo.define('addon1.chatter', function(require){
        'use strict';
    
        var composer = require('mail.composer');
    
        composer.BasicComposer.include({
            message_get_suggested_recipients: function () {
            var self = this;
            var email_addresses = _.pluck(this.suggested_partners, 'email_address');
            return this.thread_dataset
                .call('message_get_suggested_recipients', [[this.context.default_res_id], this.context])
                .done(function (suggested_recipients) {
                    var thread_recipients = suggested_recipients[self.context.default_res_id];
                    _.each(thread_recipients, function (recipient) {
                        var parsed_email = utils.parse_email(recipient[1]);
                        if (_.indexOf(email_addresses, parsed_email[1]) === -1) {
                            self.suggested_partners.push({
                                checked: recipient[3] || true,
                                partner_id: recipient[0],
                                full_name: recipient[1],
                                name: parsed_email[0],
                                email_address: parsed_email[1],
                                reason: recipient[2],
                            });
                        }
                    });
                });
            }
        });
    });
    
    views/chatter.xml

    <?xml version="1.0" encoding="utf-8"?>
    <odoo>
        <data>
            <template id="assets_backend" name="addon1" inherit_id="web.assets_backend">
                <xpath expr="." position="inside">
                    <script type="text/javascript" src="/addon1/static/src/js/chatter.js"></script>
                </xpath>
            </template>    
        </data>
    </odoo>
    
    
    
    models/models.py

    # -*- coding: utf-8 -*-       
    from odoo import models, fields, api, tools
    from odoo.addons.mail.models.mail_thread import MailThread
    
    class addon1(models.AbstractModel):
        _inherit = 'mail.thread'
    
        @api.multi
        def _message_add_suggested_recipient(self, result, partner=None, email=None, reason=''):
            result = super(MailThread, self)._message_add_suggested_recipient(self, result, partner, email, reason)
    
            if partner and partner.email:  # complete profile: id, name <email>
                result[self.ids[0]].append((partner.id, '%s<%s>' % (partner.name, partner.email), reason, False))
            return result
    
    #-*-编码:utf-8-*-
    从odoo导入模型、字段、api和工具
    从odoo.addons.mail.models.mail\u线程导入MailThread
    类addon1(models.AbstractModel):
    _inherit='mail.thread'
    @api.multi
    定义消息添加建议收件人(自我、结果、合作伙伴=无、电子邮件=无、原因=“”):
    结果=超级(MailThread,self)。\u消息\u添加\u建议\u收件人(self,result,partner,email,reason)
    if partner和partner.email:#完整配置文件:id、姓名
    结果[self.id[0]].append((partner.id,“%s%”(partner.name,partner.email),reason,False))
    返回结果
    
    安装此插件后,我可以观察到,当Odoo网站打开时,会加载javascript(来自插件),但断点没有捕捉到正确的位置(当发出“新消息”时),这意味着加载的javascript无效


    怎么了?

    非常感谢。工作得很有魅力!:)与此同时,我尝试了不同的方法(),但没有成功。所以我使用了你的解决方案。再次感谢你!:-)