diff --git a/app_chatgpt/models/__init__.py b/app_chatgpt/models/__init__.py index 6f41af76..aadc6ff6 100644 --- a/app_chatgpt/models/__init__.py +++ b/app_chatgpt/models/__init__.py @@ -1,9 +1,9 @@ # -*- coding: utf-8 -*- +from . import res_partner from . import mail_channel from . import res_config_settings from . import ai_robot -from . import res_partner from . import res_partner_ai_use from . import res_users from . import mail_message diff --git a/app_chatgpt/models/res_partner.py b/app_chatgpt/models/res_partner.py index a4b6787b..c6b7f597 100644 --- a/app_chatgpt/models/res_partner.py +++ b/app_chatgpt/models/res_partner.py @@ -1,9 +1,58 @@ # -*- coding: utf-8 -*- -from odoo import fields, models +from odoo import fields, models, api class ResPartner(models.Model): _inherit = "res.partner" gpt_id = fields.Many2one('ai.robot', string='Bind to ChatGpt') + + is_chat_private = fields.Boolean('Allow Chat Private', default=False) + + @api.model + def im_search(self, name, limit=20): + users = self.env['res.users'].search([ + ('id', '!=', self.env.user.id), + ('name', 'ilike', name), + ('active', '=', True), + ('share', '=', False), + ('is_chat_private', '=', True) + ], order='gpt_id, name, id', limit=limit) + return list(users.partner_id.mail_partner_format().values()) + + def mail_partner_format(self, fields=None): + # 直接覆盖原生,增加 gpt_id 字段 + partners_format = dict() + if not fields: + fields = {'id': True, 'name': True, 'email': True, 'active': True, 'im_status': True, 'gpt_id': 0, 'user': {}} + for partner in self: + data = {} + if 'id' in fields: + data['id'] = partner.id + if 'name' in fields: + name = partner.name + # 英文不好分,暂时不隐名 + # if not partner.related_user_id.gpt_id: + # name = partner.name[0] + '*' * (len(partner.name) - 1) + data['name'] = name + if 'email' in fields: + data['email'] = partner.email + if 'active' in fields: + data['active'] = partner.active + if 'im_status' in fields: + data['im_status'] = partner.im_status + if 'gpt_id' in fields: + data['gpt_id'] = partner.gpt_id.id if partner.gpt_id else 0 + if 'user' in fields: + internal_users = partner.user_ids - partner.user_ids.filtered('share') + main_user = internal_users[0] if len(internal_users) > 0 else partner.user_ids[0] if len(partner.user_ids) > 0 else self.env['res.users'] + data['user'] = { + "id": main_user.id, + "isInternalUser": not main_user.share, + } if main_user else [('clear',)] + # if 'guest' in self.env.context or not self.env.user.has_group('base.group_erp_manager'): + # 完全不显示 邮箱 + data.pop('email', None) + partners_format[partner] = data + return partners_format diff --git a/app_chatgpt/models/res_users.py b/app_chatgpt/models/res_users.py index 2c4f3b1d..b6bff3a5 100644 --- a/app_chatgpt/models/res_users.py +++ b/app_chatgpt/models/res_users.py @@ -14,3 +14,4 @@ class ResUsers(models.Model): ], string='Allowed Conversation Mode', default='all', ondelete='set default') gpt_wl_partners = fields.Many2many('res.partner', 'res_partner_ai_use', 'ai_user_id', 'name', string='Allowed Partners') gpt_demo_time = fields.Integer('Default Demo Time', default=0) + is_chat_private = fields.Boolean('Allow Chat Private', default=False, related='partner_id.is_chat_private', inherited=True, readonly=False) \ No newline at end of file