@@ -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)]
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user