添加功能

This commit is contained in:
zhouzhou
2024-12-06 16:13:03 +08:00
parent 127886c044
commit 368d88bc41
10 changed files with 125 additions and 26 deletions
+1
View File
@@ -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',
@@ -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 {
@@ -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):
"""司龄计算"""
@@ -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
1 id name model_id:id group_id:id perm_read perm_write perm_create perm_unlink
13 access_applicant_tage_setting applicant_tage_setting model_applicant_tage_setting base.group_user 1 1 1 1
14 access_yuthon_job_postings yuthon_job_postings model_yuthon_job_postings base.group_user 1 1 1 1
15 access_interview_message_line interview_message_line model_interview_message_line base.group_user 1 1 1 1
16 access_yuthon_hr_employee_time_wizard yuthon_hr_employee_time_wizard model_yuthon_hr_employee_time_wizard base.group_user 1 1 1 1
@@ -257,6 +257,17 @@
</xpath>
</field>
</record>
<record id="view_employee_inherit_filter" model="ir.ui.view">
<field name="name">hr.employee.inherit.search</field>
<field name="model">hr.employee</field>
<field name="inherit_id" ref="hr.view_employee_filter"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='job_id']" position="after">
<field name="pinyin_name"/>
<field name="pinyin_min"/>
</xpath>
</field>
</record>
<record id="all_data_write_user" model="ir.actions.server">
<field name="name">批量更新员工</field>
<field name="model_id" ref="hr.model_hr_employee"/>
@@ -268,6 +279,14 @@
<field name="view_mode">tree,kanban,form,activity,graph,pivot,hierarchy</field>
</record>
<record id="all_data_write_time_form" model="ir.actions.server">
<field name="name">批量更新时间表</field>
<field name="model_id" ref="hr.model_hr_employee"/>
<field name="binding_model_id" ref="hr.model_hr_employee"/>
<field name="state">code</field>
<field name="code">action = model.action_hr_time_form()</field>
</record>
<record id="view_employee_form_inherit_hr_attendance" model="ir.ui.view">
<field name="name">hr.employee.attendance.form</field>
<field name="model">hr.employee</field>
+2 -1
View File
@@ -1 +1,2 @@
from . import hr_employee_wizard
from . import hr_employee_wizard
from . import hr_employee_time_wizard
@@ -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
@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="view_hr_employee_time_wizard_form" model='ir.ui.view'>
<field name="name">考勤时间表</field>
<field name="model">yuthon.hr.employee.time.wizard</field>
<field name="arch" type="xml">
<form string="考勤时间表">
<sheet>
<group>
<field name="department_id"/>
<field name="employee_ids" widget="many2many_tags"/>
<field name="attendance_id"/>
</group>
</sheet>
<footer>
<button name="confirm" string="确认" type="object" class="oe_highlight"/>
<button string="返回" class="btn-secondary" special="cancel"/>
</footer>
</form>
</field>
</record>
</odoo>
+29 -22
View File
@@ -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 = {
+2 -2
View File
@@ -55,13 +55,13 @@
</group>
<group col="3">
<group>
<field name="is_change_notice"/>
<field name="is_sticky" string="置顶"/>
</group>
<group>
<field name="employee_ids" widget="many2many_tags" required="1" domain="[('yuthon_company', '=', yuthon_company)]"/>/>
</group>
<group>
<field name="is_sticky"/>
<field name="is_change_notice"/>
</group>
</group>
</sheet>