diff --git a/yuthon_hr_employee/__manifest__.py b/yuthon_hr_employee/__manifest__.py
index 68854a8c1..3570d4382 100644
--- a/yuthon_hr_employee/__manifest__.py
+++ b/yuthon_hr_employee/__manifest__.py
@@ -27,6 +27,7 @@
'views/hr_job_type_views.xml',
'views/inherit_hr_job_views.xml',
'wizard/hr_employee_wizard_views.xml',
+ 'wizard/hr_employee_time_wizard_views.xml',
'views/inherit_hr_applicant_views.xml',
'views/publish_applicant_setting_views.xml',
'views/yuthon_job_postings_views.xml',
diff --git a/yuthon_hr_employee/controllers/employee_banner_route.py b/yuthon_hr_employee/controllers/employee_banner_route.py
index 3d0bebf92..1432770db 100644
--- a/yuthon_hr_employee/controllers/employee_banner_route.py
+++ b/yuthon_hr_employee/controllers/employee_banner_route.py
@@ -6,7 +6,7 @@ class EmployeeBannerRoute(Controller):
@route('/employee/banner/route', type='json', auth='user')
def employee_banner_route(self):
employees = request.env['hr.employee'].sudo()
- hired_count = employees.search_count([('use_user_type', '=', 'formal')]) # 正式
+ hired_count = employees.search_count([('use_user_type', '=', 'formal_one')]) # 正式
in_hired_count = employees.search_count([]) # 在职
all_hired_count = employees.search_count([]) # 全职
return {
diff --git a/yuthon_hr_employee/models/yuthon_hr_employee.py b/yuthon_hr_employee/models/yuthon_hr_employee.py
index 9283c674d..390fde949 100644
--- a/yuthon_hr_employee/models/yuthon_hr_employee.py
+++ b/yuthon_hr_employee/models/yuthon_hr_employee.py
@@ -159,6 +159,15 @@ class YuthonHrEmployee(models.Model):
"target": "new",
}
+ def action_hr_time_form(self):
+ return {
+ "type": "ir.actions.act_window",
+ "name": "批量更新时间表",
+ "res_model": "yuthon.hr.employee.time.wizard",
+ "view_mode": "form",
+ "target": "new",
+ }
+
@api.depends('entry_date')
def _compute_company_old(self):
"""司龄计算"""
diff --git a/yuthon_hr_employee/security/ir.model.access.csv b/yuthon_hr_employee/security/ir.model.access.csv
index e007b8165..1b197583d 100644
--- a/yuthon_hr_employee/security/ir.model.access.csv
+++ b/yuthon_hr_employee/security/ir.model.access.csv
@@ -13,3 +13,4 @@ access_publish_applicant_setting,publish_applicant_setting,model_publish_applica
access_applicant_tage_setting,applicant_tage_setting,model_applicant_tage_setting,base.group_user,1,1,1,1
access_yuthon_job_postings,yuthon_job_postings,model_yuthon_job_postings,base.group_user,1,1,1,1
access_interview_message_line,interview_message_line,model_interview_message_line,base.group_user,1,1,1,1
+access_yuthon_hr_employee_time_wizard,yuthon_hr_employee_time_wizard,model_yuthon_hr_employee_time_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 013a942eb..5e4c827b5 100644
--- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
+++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
@@ -257,6 +257,17 @@
+
+ hr.employee.inherit.search
+ hr.employee
+
+
+
+
+
+
+
+
批量更新员工
@@ -268,6 +279,14 @@
tree,kanban,form,activity,graph,pivot,hierarchy
+
+ 批量更新时间表
+
+
+ code
+ action = model.action_hr_time_form()
+
+
hr.employee.attendance.form
hr.employee
diff --git a/yuthon_hr_employee/wizard/__init__.py b/yuthon_hr_employee/wizard/__init__.py
index 2581ba60e..e4373911c 100644
--- a/yuthon_hr_employee/wizard/__init__.py
+++ b/yuthon_hr_employee/wizard/__init__.py
@@ -1 +1,2 @@
-from . import hr_employee_wizard
\ No newline at end of file
+from . import hr_employee_wizard
+from . import hr_employee_time_wizard
\ No newline at end of file
diff --git a/yuthon_hr_employee/wizard/hr_employee_time_wizard.py b/yuthon_hr_employee/wizard/hr_employee_time_wizard.py
new file mode 100644
index 000000000..f9f9a95ab
--- /dev/null
+++ b/yuthon_hr_employee/wizard/hr_employee_time_wizard.py
@@ -0,0 +1,39 @@
+# -*- 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 YuthonHrEmployeeTimeWizard(models.Model):
+ _name = 'yuthon.hr.employee.time.wizard'
+
+ department_id = fields.Many2one('hr.department', string='部门')
+ employee_ids = fields.Many2many('hr.employee', compute='_compute_all_employees', string='所有员工' ,store=True, )
+ attendance_id = fields.Many2one('resource.calendar', string='考勤时间表')
+
+ @api.depends('department_id')
+ def _compute_all_employees(self):
+ for record in self:
+ if record.department_id:
+ record.employee_ids = self.get_all_employees(record.department_id)
+ else:
+ record.employee_ids = False
+
+ def get_all_employees(self, department):
+ employees = self.env['hr.employee'].search([('department_id', '=', department.id)])
+ child_departments = self.env['hr.department'].search([('parent_id', '=', department.id)])
+ for child_department in child_departments:
+ employees += self.get_all_employees(child_department)
+
+ return employees
+
+ def confirm(self):
+ for employee_id in self.employee_ids:
+ if employee_id.resource_calendar_id:
+ employee_id.write({
+ 'resource_calendar_id': self.attendance_id.id})
+ else:
+ pass
\ No newline at end of file
diff --git a/yuthon_hr_employee/wizard/hr_employee_time_wizard_views.xml b/yuthon_hr_employee/wizard/hr_employee_time_wizard_views.xml
new file mode 100644
index 000000000..1bc684c8b
--- /dev/null
+++ b/yuthon_hr_employee/wizard/hr_employee_time_wizard_views.xml
@@ -0,0 +1,22 @@
+
+
+
+ 考勤时间表
+ yuthon.hr.employee.time.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
index d451b7038..d44010811 100644
--- a/yuthon_hr_employee/wizard/hr_employee_wizard.py
+++ b/yuthon_hr_employee/wizard/hr_employee_wizard.py
@@ -35,14 +35,14 @@ class YuthonHrEmployeeWizard(models.Model):
}
def employee_user_data(self,row):
- employee_name = self.env['hr.employee'].search([('name', '=', row[0].value)])
- text = row[1].value
- text = text.replace('\\', '')
- department_ids = self.env['hr.department'].search([('name', '=', text)])
- if department_ids:
- department_id = department_ids[0]
- else:
- raise UserError(f'{text}不存在,请检查。')
+ employee_name = self.env['hr.employee'].search([('name', '=', row[1].value)])
+ department_id = self.env['hr.department'].search([('id', '=', employee_name.department_id.id)])
+ # text = row[1].value
+ # text = text.replace('\\', '')
+ # if department_ids:
+ # department_id = department_ids[0]
+ # else:
+ # raise UserError(f'{text}不存在,请检查。')
# = self.env['hr.job'].search([('name', '=', row[2].value)])
# use_user_type_dict = {'正式职工': 'formal', '劳务协议': 'labor', '兼职协议': 'part_time', '兼职用工': 'employment', '': ''}
# use_user_type = use_user_type_dict[row[1].value]
@@ -51,21 +51,28 @@ class YuthonHrEmployeeWizard(models.Model):
# marital = marital_dict[row[19].value]
# political_aspects_dict = {'中共党员': 'cpc_dang', '民盟': 'nld', '共青团员': 'league_member', '群众': 'people', '': ''}
# political_aspects = political_aspects_dict[row[26].value]
- role = row[4].value.split(',')
- role_list =[]
- user_role_id = self.env['soong.user.role']
- for i in role:
- role_id = user_role_id.search([('name', '=', i)])
- if not role_id:
- role_id = user_role_id.create({'name': i})
- role_list.append(role_id.id)
+ # role = row[4].value.split(',')
+ # role_list =[]
+ # user_role_id = self.env['soong.user.role']
+ # for i in role:
+ # role_id = user_role_id.search([('name', '=', i)])
+ # if not role_id:
+ # role_id = user_role_id.create({'name': i})
+ # role_list.append(role_id.id)
+ use_user_type_dict = {'正式合同': 'formal_one', '劳务协议': 'labor', '正式合同(二签)': 'formal_two', '正式合同(无固定)': 'formal_none',
+ '兼职协议':'part_time','用工协议': 'employment','实习协议': 'internship'}
+
+ user_role_id = self.env['soong.user.role'].search([('name', '=', row[3].value)], limit=1)
+ job_id = self.env['hr.job'].search([('name', '=', row[4].value),('department_id', '=',department_id.id)],limit=1)
+ parent_id = self.env['hr.employee'].search([('name', '=', row[6].value)])
employee_date = {
- 'name': row[0].value, # 姓名
- '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 row[3].value else None,
- 'work_phone': row[5].value if row[5].value else None,
- 'user_role_ids': [(6, 0, role_list)]
+ 'number':row[0].value, # 序号
+ 'name': row[1].value, # 姓名
+ 'work_phone': row[2].value if row[2].value else None,
+ 'user_role_id': user_role_id.id if user_role_id else None,
+ 'job_id': job_id.id if job_id else None,
+ 'use_user_type': use_user_type_dict.get(row[5].value) if row[5].value else None, # 用工形式
+ 'parent_id': parent_id.id if parent_id else None,
}
# employee_data = {
diff --git a/yuthon_notice/views/yuthon_notice_views.xml b/yuthon_notice/views/yuthon_notice_views.xml
index 0b6c7139c..506dbac46 100644
--- a/yuthon_notice/views/yuthon_notice_views.xml
+++ b/yuthon_notice/views/yuthon_notice_views.xml
@@ -55,13 +55,13 @@
-
+
/>
-
+