From 9762cfe90b20433b4fe824b427a5d9fc9c6f7ba6 Mon Sep 17 00:00:00 2001 From: ONION <2275333053@qq.com> Date: Mon, 19 Aug 2024 14:22:07 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E6=9B=B4=E6=96=B0=E5=91=98?= =?UTF-8?q?=E5=B7=A5=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wizard/hr_employee_wizard.py | 110 +++++++++++------- 1 file changed, 71 insertions(+), 39 deletions(-) diff --git a/yuthon_hr_employee/wizard/hr_employee_wizard.py b/yuthon_hr_employee/wizard/hr_employee_wizard.py index 8d7efccfb..7675d7a69 100644 --- a/yuthon_hr_employee/wizard/hr_employee_wizard.py +++ b/yuthon_hr_employee/wizard/hr_employee_wizard.py @@ -22,9 +22,11 @@ class YuthonHrEmployeeWizard(models.Model): raise ValidationError('请上传文件。') book = xlrd.open_workbook(file_contents=base64.decodebytes(self.excel_file)) sh = book.sheet_by_index(0) + sh2 = book.sheet_by_index(1) + sh3 = book.sheet_by_index(2) for rx in range(1, sh.nrows): row = sh.row(rx) - self.employee_user_data(row) + self.employee_user_data(row, sh2, sh3) return { 'name': '批量更新员工', 'type': 'ir.actions.act_window', @@ -32,45 +34,75 @@ class YuthonHrEmployeeWizard(models.Model): 'res_model': 'hr.employee', } - def employee_user_data(self, row): - employee_name = self.env['hr.employee'].search([('name', '=', row[0].value)]) - department_id = self.env['hr.department'].search([('name', '=', row[1].value.split('\\')[-1])]) - role_main = self.env['soong.user.role'].search([('name', '=', row[4].value)]) - job = self.env['hr.job'].search([('name', '=', row[7].value)]) - job_lv = self.env['yuthon.job.lv'].search([('name', '=', row[8].value)]) - parent_id = self.env['hr.employee'].search([('name', '=', row[9].value)]) - if role_main: - role_list_id = role_main - else: - role_list_id = self.env['soong.user.role'].create({'name': row[4].value}) - if job: - job_id = job - else: - job_id = self.env['hr.job'].create({'name': row[7].value}) - if job_lv: - job_lv_id = job_lv - else: - job_lv_id = self.env['yuthon.job.lv'].create({'name': row[8].value}) - role_data = row[5].value - role_list_ids = [] - for user in role_data.split(','): - user_role = self.env['soong.user.role'].search([('name', '=', user)]) - if user_role: - role_list_ids.append(user_role.id) - else: - new_user_role = self.env['soong.user.role'].create({'name': user}) - role_list_ids.append(new_user_role.id) + def employee_user_data(self, row, sh2, sh3): + employee_name = self.env['hr.employee'].search([('name', '=', row[4].value)]) + use_user_type_dict = {'正式职工': 'formal', '劳务协议': 'labor', '兼职协议': 'part_time', '兼职用工': 'employment', '': ''} + use_user_type = use_user_type_dict[row[1].value] + job_lv_id = self.env['yuthon.job.lv'].search([('name', '=', row[9].value)]) + marital_dict = {'单身': 'single', '已婚': 'married', '合法同居者': 'cohabitant', '丧偶': 'widower', '离异': 'divorced', '': ''} + marital = marital_dict[row[19].value] + political_aspects_dict = {'中共党员': 'cpc_dang', '民盟': 'nld', '共青团员': 'league_member', '群众': 'people', '': ''} + political_aspects = political_aspects_dict[row[26].value] + employee_data = { - 'name': employee_name.name, - 'department_id': department_id.id, - 'user_sex': 'boy' if row[2].value == '男' else 'girl', - 'birthday': datetime.strptime(row[3].value, '%Y-%m-%d').date() if len(row[3].value) != 0 else '', - 'user_role_id': role_list_id, - 'user_role_ids': role_list_ids, - 'work_phone': row[6].value, - 'job_id': job_id, - 'job_lv_id': job_lv_id, - 'parent_id': parent_id, + 'use_user_type': use_user_type if use_user_type else None, # 用工形式 + 'marital': marital if marital else None, # 婚姻 + 'user_type': row[23].value if row[23].value else None, # 人员类别 + 'high_degree': row[30].value if row[30].value else None, # 最高学历 + 'seniority_prize_pick_up_status': row[43].value if row[43].value else None, # 工龄相关年功奖领取情况 + 'high_degree2': row[31].value if row[31].value else None, # 最高学位 + 'new_start_contract_data': datetime.strptime(row[28].value, '%Y/%m/%d').date() if row[28].value else None, # 最新合同开始日期 + 'political_aspects': political_aspects if political_aspects else None, # 政治面貌 + 'birthday': datetime.strptime(row[20].value, '%Y/%m/%d').date() if row[20].value else None, # 出生年月 + 'dang_data': datetime.strptime(row[27].value, '%Y/%m/%d').date() if row[27].value else None, # 入党(团)时间 + 'retire_date': datetime.strptime(row[24].value, '%Y/%m/%d').date() if row[24].value else None, # 退休日期 + 'new_end_contract_data': datetime.strptime(row[29].value, '%Y/%m/%d').date() if row[29].value else None, # 最新合同终止日期 + 'job_lv_id': job_lv_id.id, # 最新职级 有几个没有 + 'user_sex': 'boy' if row[18].value == '男' else 'girl', # 性别 + 'nation': row[17].value if row[17].value else None, # 民族 + 'identification_id': row[14].value if row[14].value else None, # 身份证号 + 'entry_date': datetime.strptime(row[11].value, '%Y/%m/%d').date() if row[11].value else None, # 入职时间 + 'confirmation_date': datetime.strptime(row[12].value, '%Y/%m/%d').date() if row[12].value else None, # 转正时间 + 'user_number_start_time': datetime.strptime(row[15].value, '%Y/%m/%d').date() if row[15].value else None, # 身份证有效期开始时间 + 'user_number_end_time': datetime.strptime(row[16].value, '%Y/%m/%d').date() if row[16].value else None, # 身份证有效期结束时间 + 'mobile_phone': row[8].value if row[8].value else None, # 手机号码 + 'work_phone': row[7].value if row[7].value else None, # 办公电话 + 'user_number': row[3].value if row[3].value else None, # 员工编号 } if employee_name: employee_name.write(employee_data) + + # 处理教育经历 + for rx in range(1, sh2.nrows): + row2 = sh2.row(rx) + if row2[0].value == row[4].value: + existing_education = employee_name.education_experience_ids.filtered(lambda e: e.name_school == row2[1].value) + education_data = { + 'name_school': row2[1].value if row2[1].value else None, # 学校名称 + 'end_date': datetime.strptime(row2[2].value, '%Y/%m/%d').date() if row2[2].value else None, # 毕业时间 + 'professional': row2[3].value if row2[3].value else None, # 专业 + 'Part_time_degree': row2[4].value if row2[4].value else None, # 非全日制学历学位 + 'full_time_degree': row2[5].value if row2[5].value else None, # 全日制学历学位 + } + if existing_education: + existing_education.write(education_data) + else: + employee_name.write({ + 'education_experience_ids': [(0, 0, education_data)] + }) + + # 处理技能证书 + for rx in range(1, sh3.nrows): + row3 = sh3.row(rx) + if row3[0].value == row[4].value: + existing_certificate = employee_name.skills_certificates_ids.filtered(lambda s: s.rank_name == row3[1].value) + certificate_data = { + 'rank_name': row3[1].value if row3[1].value else None, # 职级名称 + 'rank_time': datetime.strptime(row3[2].value, '%Y/%m/%d').date() if row3[2].value else None, # 职级时间 + } + if existing_certificate: + existing_certificate.write(certificate_data) + else: + employee_name.write({ + 'skills_certificates_ids': [(0, 0, certificate_data)] + })