如何解决如何在创建时让客户发送到服务台的第一封电子邮件
我在我的非 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 举报,一经查实,本站将立刻删除。