添加功能
This commit is contained in:
@@ -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
|
||||
|
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user