import logging import requests from odoo import models, fields, api, _ _logger = logging.getLogger(__name__) class JkmPracticeEmployee(models.Model): _inherit = 'hr.employee' _description = '员工信息' we_id = fields.Char(string='企微ID', index=True) @api.model_create_multi def create(self, vals_list): for val in vals_list: if 'work_email' in val: val["we_id"] = self._get_we_id(val.get('work_email')) return super(JkmPracticeEmployee, self).create(vals_list) def write(self, vals): if 'work_email' in vals: vals["we_id"] = self._get_we_id(vals.get('work_email')) return super(JkmPracticeEmployee, self).write(vals) @api.depends('work_contact_id', 'work_contact_id.mobile', 'work_contact_id.email') def _compute_work_contact_details(self): for employee in self: if employee.work_contact_id: employee.mobile_phone = employee.work_contact_id.mobile employee.work_email = employee.work_contact_id.email if employee.work_contact_id.email: employee.we_id = self._get_we_id(employee.work_contact_id.email) def _get_we_id(self, work_email): json1 = { 'params': { 'work_email': work_email } } url = '/api/get/we_id/info' config = self.env['res.config.settings'].get_values() ret = requests.post((config['ims_url'] + url), json=json1, data={}) result = ret.json()['result'] if result['code'] == 200: if result['we_id']: return result['we_id'] return None def _employee_info_sync(self): url = '/api/get/organization' config = self.env['res.config.settings'].get_values() ret = requests.post((config['ims_url'] + url), json={}, data={}) result = ret.json()['result'] if result['code'] == 200: if result['employee_list']: for employee_info in result['employee_list']: if employee_info['work_email']: hr_employee = self.sudo().search([('work_email', '=', employee_info['work_email'])]) hr_employee.write({'we_id': employee_info['we_id']}) if hr_employee.user_id: hr_employee.user_id.write({'we_employee_id': employee_info['we_id']}) else: logging.info('_employee_info_sync error:%s' % result['message'])