微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在创建时让客户发送到服务台的第一封电子邮件

如何解决如何在创建时让客户发送到服务台的第一封电子邮件

我在我的非 odoo 网站上有一个联系表格,用于向我的 odoo 帮助台电子邮件别名发送电子邮件。因为电子邮件是从我的网站发送的,所以“发件人”电子邮件是“no-reply@mydomain.com”,而不是服务台中的客户电子邮件。客户电子邮件位于发送到服务台的第一封电子邮件的正文中。是否可以在 create 中的 helpdesk_ticket.py 方法中检索发送到服务台的第一条消息/电子邮件

@api.model_create_multi
def create(self,list_value):
    Now = fields.Datetime.Now()
    # determine user_id and stage_id if not given. Done in batch.
    teams = self.env['helpdesk.team'].browse([vals['team_id'] for vals in list_value if vals.get('team_id')])
    team_default_map = dict.fromkeys(teams.ids,dict())
    for team in teams:
        team_default_map[team.id] = {
            'stage_id': team._determine_stage()[team.id].id,'user_id': team._determine_user_to_assign()[team.id].id
        }
        
    _logger.info("in create");    
    _logger.info(list_value); 
    # Manually create a partner Now since 'generate_recipients' doesn't keep the name. This is
    # to avoid intrusive changes in the 'mail' module
    for vals in list_value:
        partner_id = vals.get('partner_id',False)
        partner_name = vals.get('partner_name',False)
        partner_email = vals.get('partner_email',False)
        if partner_name and partner_email and not partner_id:
            try:
                vals['partner_id'] = self.env['res.partner'].find_or_create(
                    tools.formataddr((partner_name,partner_email))
                )
            except UnicodeEncodeError:
                # 'formataddr' doesn't support non-ascii characters in email. Therefore,we fall
                # back on a simple partner creation.
                vals['partner_id'] = self.env['res.partner'].create({
                    'name': partner_name,'email': partner_email,}).id

    # determine partner email for ticket with partner but no email given
    partners = self.env['res.partner'].browse([vals['partner_id'] for vals in list_value if 'partner_id' in vals and vals.get('partner_id') and 'partner_email' not in vals])
    partner_email_map = {partner.id: partner.email for partner in partners}
    partner_name_map = {partner.id: partner.name for partner in partners}

    for vals in list_value:
        if vals.get('team_id'):
            team_default = team_default_map[vals['team_id']]
            if 'stage_id' not in vals:
                vals['stage_id'] = team_default['stage_id']
            # Note: this will break the randomly distributed user assignment. Indeed,it will be too difficult to
            # equally assigned user when creating ticket in batch,as it requires to search after the last assigned
            # after every ticket creation,which is not very performant. We decided to not cover this user case.
            if 'user_id' not in vals:
                vals['user_id'] = team_default['user_id']
            if vals.get('user_id'):  # if a user is finally assigned,force ticket assign_date and reset assign_hours
                vals['assign_date'] = fields.Datetime.Now()
                vals['assign_hours'] = 0

        # set partner email if in map of not given
        if vals.get('partner_id') in partner_email_map:
            vals['partner_email'] = partner_email_map.get(vals['partner_id'])
        # set partner name if in map of not given
        if vals.get('partner_id') in partner_name_map:
            vals['partner_name'] = partner_name_map.get(vals['partner_id'])

        if vals.get('stage_id'):
            vals['date_last_stage_update'] = Now

    # context: no_log,because subtype already handle this
    tickets = super(Ticket,self).create(list_value)

    # make customer follower
    for ticket in tickets:
        if ticket.partner_id:
            ticket.message_subscribe(partner_ids=ticket.partner_id.ids)

        ticket._portal_ensure_token()

    # apply SLA
    tickets.sudo()._sla_apply()

    return tickets   

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。