diff --git a/yuthon_approval/wizard/approval_notice_wizard_views.xml b/yuthon_approval/wizard/approval_notice_wizard_views.xml
index 073ea490e..dfa93a4ad 100644
--- a/yuthon_approval/wizard/approval_notice_wizard_views.xml
+++ b/yuthon_approval/wizard/approval_notice_wizard_views.xml
@@ -12,6 +12,7 @@
diff --git a/yuthon_hr_employee/__init__.py b/yuthon_hr_employee/__init__.py
index 0650744f6..9b4296142 100644
--- a/yuthon_hr_employee/__init__.py
+++ b/yuthon_hr_employee/__init__.py
@@ -1 +1,2 @@
from . import models
+from . import wizard
diff --git a/yuthon_hr_employee/__manifest__.py b/yuthon_hr_employee/__manifest__.py
index c04a2039e..8e05f7523 100644
--- a/yuthon_hr_employee/__manifest__.py
+++ b/yuthon_hr_employee/__manifest__.py
@@ -22,7 +22,7 @@
'views/yuthon_job_lv_views.xml',
'views/yuthon_user_role_views.xml',
'views/inherit_res_user_views.xml',
- 'views/yuthon_hr_employee_write_views.xml',
+ 'wizard/hr_employee_wizard_views.xml',
],
'installable': True,
'application': False,
diff --git a/yuthon_hr_employee/models/__init__.py b/yuthon_hr_employee/models/__init__.py
index 4ca59c644..1af45361c 100644
--- a/yuthon_hr_employee/models/__init__.py
+++ b/yuthon_hr_employee/models/__init__.py
@@ -3,4 +3,3 @@ from . import yuthon_job_lv
from . import yuthon_user_role
from . import yuthon_hr_department
from . import inherit_res_user
-from . import yuthon_hr_employee_write
diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py
index b0000335a..49834998d 100644
--- a/yuthon_hr_employee/models/yuthon_hr_employee.py
+++ b/yuthon_hr_employee/models/yuthon_hr_employee.py
@@ -33,6 +33,7 @@ class YuthonHrEmployee(models.Model):
entry_time = fields.Datetime(string="入职时间")
confirmation_time = fields.Datetime(string="转正时间")
company_old = fields.Integer(string="司龄")
+ user_sex = fields.Selection([('girl', '女'), ('boy', '男')], string="性别")
user_number_start_time = fields.Date(string="身份中有效开始时间")
user_number_end_time = fields.Date(string="身份证有效到期时间")
nation = fields.Selection(nation_list, string="民族")
@@ -93,7 +94,7 @@ class YuthonHrEmployee(models.Model):
return {
"type": "ir.actions.act_window",
"name": "批量更新员工",
- "res_model": "yuthon.hr.employee.write",
+ "res_model": "yuthon.hr.employee.wizard",
"view_mode": "form",
"target": "new",
}
diff --git a/yuthon_hr_employee/models/yuthon_hr_employee_write.py b/yuthon_hr_employee/models/yuthon_hr_employee_write.py
deleted file mode 100644
index cf3b04185..000000000
--- a/yuthon_hr_employee/models/yuthon_hr_employee_write.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# -*- coding: utf-8 -*-
-import base64
-import pandas as pd
-from odoo import api, fields, models, tools, _
-from odoo.exceptions import UserError
-
-class YuthonHrEmployeeWrite(models.Model):
- _name = 'yuthon.hr.employee.write'
-
- excel_file = fields.Binary(string="上传Excel表")
- excel_name = fields.Char(string="文件名")
-
- def write_employee(self):
- text = self.env['hr.employee'].search()
-
- def employee_excel_write(self):
- if not self.excel_file or not ('.xls' in self.excel_name or '.xlsx' in self.excel_name):
- raise UserError("请上传Excel文件或有效excel文件")
- else:
- # 解码文件
- file_content = base64.b64decode(self.excel_file)
- # 获取字段
- current_model_fields = self.env['hr.employee'].fields_get()
- model_field_strings = {v['string']: k for k, v in current_model_fields.items()}
- # 使用pandas读取Excel文件
-
- excel_data = pd.read_excel(file_content, engine='openpyxl')
-
- excel_columns = excel_data.columns.tolist()
-
- # 检查Excel列名是否在模型字段中
- missing_fields = [col for col in excel_columns if col not in model_field_strings]
- if missing_fields:
- raise UserError(f"以下列在模型字段中不存在: {', '.join(missing_fields)}")
- return {'type': 'ir.actions.client', 'tag': 'reload'}
-
- # 获取勾选的记录
- selected_employee_ids = self.env.context.get('active_ids', [])
-
- employees = self.env['hr.employee'].browse(selected_employee_ids)
- name_to_employee = {emp.name: emp for emp in employees}
-
- for _, row in excel_data.iterrows():
- employee_name = row['员工姓名']
- try:
- if employee_name in name_to_employee:
- employee = name_to_employee[employee_name]
- update_vals = {model_field_strings[col]: row[col] for col in excel_columns if col in model_field_strings}
- employee.write(update_vals)
- else:
- raise UserError(f"在选中的记录中找不到员工姓名为 '{employee_name}' 的记录")
- except ValueError:
- raise ValueError("字段值错误或字段不存在")
-
-
- return {'type': 'ir.actions.client', 'tag': 'reload'}
-
-
-
diff --git a/yuthon_hr_employee/security/ir.model.access.csv b/yuthon_hr_employee/security/ir.model.access.csv
index c8e3ec8a4..ecca149d2 100644
--- a/yuthon_hr_employee/security/ir.model.access.csv
+++ b/yuthon_hr_employee/security/ir.model.access.csv
@@ -1,4 +1,4 @@
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
access_yuthon_job_lv,yuthon_job_lv,model_yuthon_job_lv,base.group_user,1,1,1,1
access_yuthon_user_role,yuthon_user_role,model_yuthon_user_role,base.group_user,1,1,1,1
-access_yuthon_hr_employee_write,yuthon.hr.employee.write,model_yuthon_hr_employee_write,base.group_user,1,1,1,1
\ No newline at end of file
+access_yuthon_hr_employee_wizard,yuthon_hr_employee_wizard,model_yuthon_hr_employee_wizard,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
index d9d537672..b17629308 100644
--- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
+++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
@@ -1,12 +1,5 @@
-
- 批量更新员工
-
-
- code
- action = model.action_hr_employee()
-
hr.employee.inherit.del.form
hr.employee
@@ -51,6 +44,7 @@
+
@@ -162,4 +156,12 @@
+
+
+ 批量更新员工
+
+
+ code
+ action = model.action_hr_employee()
+
\ No newline at end of file
diff --git a/yuthon_hr_employee/wizard/__init__.py b/yuthon_hr_employee/wizard/__init__.py
new file mode 100644
index 000000000..2581ba60e
--- /dev/null
+++ b/yuthon_hr_employee/wizard/__init__.py
@@ -0,0 +1 @@
+from . import hr_employee_wizard
\ No newline at end of file
diff --git a/yuthon_hr_employee/wizard/hr_employee_wizard.py b/yuthon_hr_employee/wizard/hr_employee_wizard.py
new file mode 100644
index 000000000..ee078b23e
--- /dev/null
+++ b/yuthon_hr_employee/wizard/hr_employee_wizard.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+from odoo import models, fields, api, _, SUPERUSER_ID
+from odoo.exceptions import ValidationError, UserError
+import xlrd
+import base64
+import datetime
+from datetime import datetime
+
+
+class YuthonHrEmployeeWizard(models.Model):
+ _name = 'yuthon.hr.employee.wizard'
+
+ excel_file = fields.Binary(string="上传Excel表")
+ excel_name = fields.Char(string="文件名")
+
+ def confirm(self):
+ """
+ 导入excel文件,按行读取数据并处理
+ :return: 导入员工信息表并更新
+ """
+ if not self.excel_file:
+ raise ValidationError('请上传文件。')
+ book = xlrd.open_workbook(file_contents=base64.decodebytes(self.excel_file))
+ sh = book.sheet_by_index(0)
+ for rx in range(1, sh.nrows):
+ row = sh.row(rx)
+ self.employee_user_data(row)
+ return {
+ 'name': '批量更新员工',
+ 'type': 'ir.actions.act_window',
+ 'view_mode': 'tree',
+ '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_data = row[4].value
+ role_list_ids = []
+ user_role = self.env['yuthon.user.role']
+ if len(role_data.split(',')) == 1:
+ if not user_role.search([('name', '=', role_data)]):
+ raise UserError('该角色未在系统中%s,请添加角色后重试' % role_data)
+ else:
+ role_list_ids.append(user_role.search([('name', '=', role_data)]).id)
+ else:
+ for i in range(1, len(role_data.split(','))):
+ if not user_role.search([('name', '=', role_data)]):
+ raise UserError('该角色未在系统中%s,请添加角色后重试' % role_data)
+ else:
+ role_list_ids.append(user_role.search([('name', '=', role_data.split(',')[i])]))
+ 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(),
+ 'main_user_role': role_list_ids,
+ 'mobile_phone': row[5].value,
+ 'work_phone': row[6].value,
+ 'work_email': row[7].value,
+ }
+ if len(employee_name) != 1:
+ raise UserError('重名请手动更新')
+ elif employee_name:
+ employee_name.write(employee_data)
+ else:
+ employee_name.create(employee_data)
+
+
+
+
+
+
+
diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_write_views.xml b/yuthon_hr_employee/wizard/hr_employee_wizard_views.xml
similarity index 58%
rename from yuthon_hr_employee/views/yuthon_hr_employee_write_views.xml
rename to yuthon_hr_employee/wizard/hr_employee_wizard_views.xml
index 390e8df3e..97946a28f 100644
--- a/yuthon_hr_employee/views/yuthon_hr_employee_write_views.xml
+++ b/yuthon_hr_employee/wizard/hr_employee_wizard_views.xml
@@ -1,17 +1,17 @@
-
+
审批意见弹窗
- yuthon.hr.employee.write
+ yuthon.hr.employee.wizard