添加功能
This commit is contained in:
@@ -15,9 +15,9 @@
|
|||||||
<attribute name="advanced_filter">True</attribute>
|
<attribute name="advanced_filter">True</attribute>
|
||||||
</xpath>
|
</xpath>
|
||||||
<!-- <xpath expr="//tree" position="after">-->
|
<!-- <xpath expr="//tree" position="after">-->
|
||||||
<!-- <header>-->
|
<header>
|
||||||
<!-- <button name="all_put_department_change" type="action" string="部门变更" class="oe_highlight"/>-->
|
<button name="all_put_department_change" type="object" string="部门变更" class="oe_highlight"/>
|
||||||
<!-- </header>-->
|
</header>
|
||||||
<!-- </xpath>-->
|
<!-- </xpath>-->
|
||||||
<xpath expr="//field[@name='total_employee']" position="attributes">
|
<xpath expr="//field[@name='total_employee']" position="attributes">
|
||||||
<attribute name="column_invisible">1</attribute>
|
<attribute name="column_invisible">1</attribute>
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
'views/yuthon_payroll_project_views.xml',
|
'views/yuthon_payroll_project_views.xml',
|
||||||
'views/yuthon_payroll_type_setting_views.xml',
|
'views/yuthon_payroll_type_setting_views.xml',
|
||||||
'views/yuthon_salary_asset_views.xml',
|
'views/yuthon_salary_asset_views.xml',
|
||||||
|
'views/salary_payroll_distribution_viwes.xml',
|
||||||
'views/yuthon_salary_project_views.xml',
|
'views/yuthon_salary_project_views.xml',
|
||||||
'views/yuthon_payroll_labor_views.xml',
|
'views/yuthon_payroll_labor_views.xml',
|
||||||
'views/yuthon_salary_documents_views.xml',
|
'views/yuthon_salary_documents_views.xml',
|
||||||
|
|||||||
@@ -9,4 +9,5 @@ from . import yuthon_payroll_retired
|
|||||||
from . import yuthon_salary_documents
|
from . import yuthon_salary_documents
|
||||||
from . import yuthon_salary_year
|
from . import yuthon_salary_year
|
||||||
from . import yuthon_salary_project
|
from . import yuthon_salary_project
|
||||||
from . import yuthon_salary_asset
|
from . import yuthon_salary_asset
|
||||||
|
from . import salary_payroll_distribution
|
||||||
@@ -333,6 +333,7 @@ class InheritHrPayslip(models.Model):
|
|||||||
self.env['hr.payslip.line'].create(payslips._get_payslip_lines())
|
self.env['hr.payslip.line'].create(payslips._get_payslip_lines())
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
# 薪资归档
|
||||||
def put_release(self):
|
def put_release(self):
|
||||||
for record in self:
|
for record in self:
|
||||||
record.write({
|
record.write({
|
||||||
@@ -340,6 +341,7 @@ class InheritHrPayslip(models.Model):
|
|||||||
'salary_state': 'to_release',
|
'salary_state': 'to_release',
|
||||||
})
|
})
|
||||||
|
|
||||||
|
# 薪资归档
|
||||||
def all_put_release(self):
|
def all_put_release(self):
|
||||||
payslip_ids = self.env["hr.payslip"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
payslip_ids = self.env["hr.payslip"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||||
for record in payslip_ids:
|
for record in payslip_ids:
|
||||||
|
|||||||
@@ -0,0 +1,25 @@
|
|||||||
|
from odoo import api, fields, models
|
||||||
|
|
||||||
|
|
||||||
|
class SalaryPayrollDistribution(models.Model):
|
||||||
|
_name = 'salary.payroll.distribution'
|
||||||
|
_description = '薪资发放'
|
||||||
|
|
||||||
|
salary_group_id = fields.Many2one('yuthon.salary.group', string="工资单分组", store=True)
|
||||||
|
actual_salary = fields.Float(string='实发工资', store=True)
|
||||||
|
current_year = fields.Integer(string='年份')
|
||||||
|
current_month = fields.Selection([
|
||||||
|
('1', '1月份'),
|
||||||
|
('2', '2月份'),
|
||||||
|
('3', '3月份'),
|
||||||
|
('4', '4月份'),
|
||||||
|
('5', '5月份'),
|
||||||
|
('6', '6月份'),
|
||||||
|
('7', '7月份'),
|
||||||
|
('8', '8月份'),
|
||||||
|
('9', '9月份'),
|
||||||
|
('10', '10月份'),
|
||||||
|
('11', '11月份'),
|
||||||
|
('12', '12月份')
|
||||||
|
], string="月份")
|
||||||
|
company_id = fields.Many2one('res.company', string='公司', index=True, default=lambda self: self.env.company)
|
||||||
@@ -21,4 +21,37 @@ class YuthonSalaryDocuments(models.Model):
|
|||||||
('12', '12月份')
|
('12', '12月份')
|
||||||
], string="月份")
|
], string="月份")
|
||||||
company_id = fields.Many2one('res.company', string='公司', index=True, default=lambda self: self.env.company)
|
company_id = fields.Many2one('res.company', string='公司', index=True, default=lambda self: self.env.company)
|
||||||
documents_ids = fields.Many2many('ir.attachment', string="附件")
|
documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||||
|
|
||||||
|
def documents_confirm(self):
|
||||||
|
month = int(self.current_month)
|
||||||
|
month_mapping = {
|
||||||
|
1: '一月', 2: '二月', 3: '三月', 4: '四月',
|
||||||
|
5: '五月', 6: '六月', 7: '七月', 8: '八月',
|
||||||
|
9: '九月', 10: '十月', 11: '十一月', 12: '十二月'
|
||||||
|
}
|
||||||
|
month_name = month_mapping.get(month, '一月')
|
||||||
|
payslip_ids = self.env['hr.payslip'].search([
|
||||||
|
('is_salary_release', '=', False),
|
||||||
|
('is_salary_push', '=', True),
|
||||||
|
('payslip_run_id.name', '=', f'{self.current_year}年-{month_name}'),
|
||||||
|
('company_id', '=', self.company_id.id) # 确保公司一致
|
||||||
|
])
|
||||||
|
|
||||||
|
# 按工资组分组并计算总和
|
||||||
|
group_data = {}
|
||||||
|
for payslip in payslip_ids:
|
||||||
|
group_id = payslip.salary_group_id.id
|
||||||
|
if group_id not in group_data:
|
||||||
|
group_data[group_id] = {
|
||||||
|
'salary_group_id': group_id,
|
||||||
|
'actual_salary': 0.0,
|
||||||
|
'current_year': self.current_year,
|
||||||
|
'current_month': self.current_month,
|
||||||
|
'company_id': self.company_id.id
|
||||||
|
}
|
||||||
|
group_data[group_id]['actual_salary'] += payslip.actual_salary
|
||||||
|
|
||||||
|
distribution_model = self.env['salary.payroll.distribution']
|
||||||
|
for group_id, data in group_data.items():
|
||||||
|
distribution_model.create(data)
|
||||||
|
|||||||
@@ -27,4 +27,5 @@ access_yuthon_salary_documents,access_yuthon_salary_documents,model_yuthon_salar
|
|||||||
access_salary_print_wizard, access_salary_print_wizard,model_salary_print_wizard,base.group_user,1,1,1,1
|
access_salary_print_wizard, access_salary_print_wizard,model_salary_print_wizard,base.group_user,1,1,1,1
|
||||||
access_salary_year_wizard,access_salary_year_wizard,model_salary_year_wizard,base.group_user,1,1,1,1
|
access_salary_year_wizard,access_salary_year_wizard,model_salary_year_wizard,base.group_user,1,1,1,1
|
||||||
access_yuthon_salary_project, access_yuthon_salary_project,model_yuthon_salary_project,base.group_user,1,1,1,1
|
access_yuthon_salary_project, access_yuthon_salary_project,model_yuthon_salary_project,base.group_user,1,1,1,1
|
||||||
access_yuthon_salary_asset, access_yuthon_salary_asset,model_yuthon_salary_asset,base.group_user,1,1,1,1
|
access_yuthon_salary_asset, access_yuthon_salary_asset,model_yuthon_salary_asset,base.group_user,1,1,1,1
|
||||||
|
access_salary_payroll_distribution,access_salary_payroll_distribution,model_salary_payroll_distribution,base.group_user,1,1,1,1
|
||||||
|
|||||||
|
@@ -1,5 +1,10 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" ?>
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
<odoo>
|
<odoo>
|
||||||
|
<record model="ir.rule" id="salary_payroll_distribution_rule">
|
||||||
|
<field name="name">薪资方法多公司</field>
|
||||||
|
<field name="model_id" ref="model_salary_payroll_distribution"/>
|
||||||
|
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||||
|
</record>
|
||||||
<record model="ir.rule" id="yuthon_payroll_common_rule">
|
<record model="ir.rule" id="yuthon_payroll_common_rule">
|
||||||
<field name="name">常用项多公司</field>
|
<field name="name">常用项多公司</field>
|
||||||
<field name="model_id" ref="model_yuthon_payroll_common"/>
|
<field name="model_id" ref="model_yuthon_payroll_common"/>
|
||||||
|
|||||||
@@ -87,15 +87,12 @@
|
|||||||
</xpath>
|
</xpath>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
<!--薪资发放-->
|
<!--薪资归档-->
|
||||||
<record id="view_hr_payslip_tree3" model="ir.ui.view">
|
<record id="view_hr_payslip_tree3" model="ir.ui.view">
|
||||||
<field name="name">hr.payslip.tree</field>
|
<field name="name">hr.payslip.tree</field>
|
||||||
<field name="model">hr.payslip</field>
|
<field name="model">hr.payslip</field>
|
||||||
<field name="arch" type="xml">
|
<field name="arch" type="xml">
|
||||||
<tree string="薪资发放" default_order="employee_id" limit="20">
|
<tree string="薪资归档" default_order="employee_id" limit="20">
|
||||||
<header>
|
|
||||||
<button name="button_salary_print" string="打印" type="object" class="oe_highlight"/>
|
|
||||||
</header>
|
|
||||||
<field name="employee_id" string="姓名" widget="ztree_select"/>
|
<field name="employee_id" string="姓名" widget="ztree_select"/>
|
||||||
<field name="date_of_entry"/>
|
<field name="date_of_entry"/>
|
||||||
<field name="company_id" string="公司" optional="hide"/>
|
<field name="company_id" string="公司" optional="hide"/>
|
||||||
@@ -394,7 +391,7 @@
|
|||||||
<field name="context">{'search_default_group_by_employee': 1}</field>
|
<field name="context">{'search_default_group_by_employee': 1}</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="action_view_hr_payslip_salary_release" model="ir.actions.act_window">
|
<record id="action_view_hr_payslip_salary_release" model="ir.actions.act_window">
|
||||||
<field name="name">薪资发放</field>
|
<field name="name">薪资归档</field>
|
||||||
<field name="res_model">hr.payslip</field>
|
<field name="res_model">hr.payslip</field>
|
||||||
<field name="view_mode">tree,form,search</field>
|
<field name="view_mode">tree,form,search</field>
|
||||||
<field name="domain">[('is_salary_push', '=', True), ('is_salary_release', '=', True)]</field>
|
<field name="domain">[('is_salary_push', '=', True), ('is_salary_release', '=', True)]</field>
|
||||||
@@ -430,13 +427,6 @@
|
|||||||
<field name="state">code</field>
|
<field name="state">code</field>
|
||||||
<field name="code">action = model.action_return_salary_wizard()</field>
|
<field name="code">action = model.action_return_salary_wizard()</field>
|
||||||
</record>
|
</record>
|
||||||
<record id="all_data_put_release" model="ir.actions.server">
|
|
||||||
<field name="name">批量推送薪资发放</field>
|
|
||||||
<field name="model_id" ref="hr_payroll.model_hr_payslip"/>
|
|
||||||
<field name="binding_model_id" ref="hr_payroll.model_hr_payslip"/>
|
|
||||||
<field name="state">code</field>
|
|
||||||
<field name="code">action = model.all_put_release()</field>
|
|
||||||
</record>
|
|
||||||
<record id="all_data_return_release" model="ir.actions.server">
|
<record id="all_data_return_release" model="ir.actions.server">
|
||||||
<field name="name">批量退回薪资审定</field>
|
<field name="name">批量退回薪资审定</field>
|
||||||
<field name="model_id" ref="hr_payroll.model_hr_payslip"/>
|
<field name="model_id" ref="hr_payroll.model_hr_payslip"/>
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<odoo>
|
||||||
|
<record id="view_salary_payroll_distribution_tree" model="ir.ui.view">
|
||||||
|
<field name="name">salary.payroll.distribution.tree</field>
|
||||||
|
<field name="model">salary.payroll.distribution</field>
|
||||||
|
<field name="arch" type="xml">
|
||||||
|
<tree string="薪资发放" editable="bottom">
|
||||||
|
<field name="current_year"/>
|
||||||
|
<field name="current_month"/>
|
||||||
|
<field name="salary_group_id"/>
|
||||||
|
<field name="actual_salary"/>
|
||||||
|
<field name="company_id" optional="hide"/>
|
||||||
|
</tree>
|
||||||
|
</field>
|
||||||
|
</record>
|
||||||
|
<record id="salary_payroll_distribution_action" model="ir.actions.act_window">
|
||||||
|
<field name="name">薪资发放</field>
|
||||||
|
<field name="res_model">salary.payroll.distribution</field>
|
||||||
|
<field name="view_mode">tree</field>
|
||||||
|
</record>
|
||||||
|
</odoo>
|
||||||
@@ -9,6 +9,7 @@
|
|||||||
<field name="current_month"/>
|
<field name="current_month"/>
|
||||||
<field name="documents_ids" widget="preview_many2many"/>
|
<field name="documents_ids" widget="preview_many2many"/>
|
||||||
<field name="company_id"/>
|
<field name="company_id"/>
|
||||||
|
<button name="documents_confirm" string="确认" type="object" class="oe_highlight"/>
|
||||||
</tree>
|
</tree>
|
||||||
</field>
|
</field>
|
||||||
</record>
|
</record>
|
||||||
|
|||||||
@@ -361,6 +361,11 @@
|
|||||||
parent="human_resources_salary_root_board"
|
parent="human_resources_salary_root_board"
|
||||||
action="hr_payroll.action_view_hr_payslip_month_form"
|
action="hr_payroll.action_view_hr_payslip_month_form"
|
||||||
sequence="7"/>
|
sequence="7"/>
|
||||||
|
<menuitem id="human_pay_slips_root_board12"
|
||||||
|
name="薪资归档"
|
||||||
|
parent="human_resources_salary_root_board"
|
||||||
|
action="yuthon_salary.action_view_hr_payslip_salary_release"
|
||||||
|
sequence="10"/>
|
||||||
<!-- <menuitem id="hr_payroll_structure_type_board"-->
|
<!-- <menuitem id="hr_payroll_structure_type_board"-->
|
||||||
<!-- name="职级类型"-->
|
<!-- name="职级类型"-->
|
||||||
<!-- parent="human_resources_salary_root_board"-->
|
<!-- parent="human_resources_salary_root_board"-->
|
||||||
@@ -458,39 +463,18 @@
|
|||||||
name="资金管理"
|
name="资金管理"
|
||||||
web_icon="yuthon_work_brand,static/description/finance.png"
|
web_icon="yuthon_work_brand,static/description/finance.png"
|
||||||
sequence="37"/>
|
sequence="37"/>
|
||||||
<menuitem id="finance_manage_employee_root_board"
|
|
||||||
name="人力资源"
|
|
||||||
parent="finance_root_board"
|
|
||||||
sequence="1"/>
|
|
||||||
<menuitem id="human_yuthon_payroll_labor_board"
|
|
||||||
name="劳务费"
|
|
||||||
parent="finance_manage_employee_root_board"
|
|
||||||
action="yuthon_salary.action_yuthon_payroll_labor"
|
|
||||||
sequence="1"/>
|
|
||||||
<menuitem id="human_yuthon_payroll_retired_board"
|
|
||||||
name="退休人员费用"
|
|
||||||
parent="finance_manage_employee_root_board"
|
|
||||||
action="yuthon_salary.action_yuthon_payroll_retired"
|
|
||||||
sequence="10"/>
|
|
||||||
<menuitem id="human_pay_slips_root_board2"
|
|
||||||
name="个税计算"
|
|
||||||
parent="finance_manage_employee_root_board"
|
|
||||||
action="yuthon_salary.action_view_hr_payslip_month_form2"
|
|
||||||
sequence="20"/>
|
|
||||||
<menuitem id="human_pay_slips_root_board"
|
<menuitem id="human_pay_slips_root_board"
|
||||||
name="薪资发放"
|
name="薪资发放"
|
||||||
parent="finance_manage_employee_root_board"
|
parent="finance_root_board"
|
||||||
action="yuthon_salary.action_view_hr_payslip_salary_release"
|
action="yuthon_salary.salary_payroll_distribution_action"
|
||||||
sequence="30"/>
|
sequence="1"/>
|
||||||
<menuitem id="yuthon_salary_asset_board"
|
<menuitem id="yuthon_salary_asset_board"
|
||||||
name="预算管理"
|
name="预算管理"
|
||||||
parent="finance_manage_employee_root_board"
|
parent="finance_root_board"
|
||||||
action="yuthon_salary.action_yuthon_salary_asset"
|
action="yuthon_salary.action_yuthon_salary_asset"
|
||||||
sequence="40"/>
|
sequence="5"/>
|
||||||
<menuitem id="human_pay_slips_root_setting"
|
|
||||||
name="配置"
|
|
||||||
parent="finance_manage_employee_root_board"
|
|
||||||
sequence="99"/>
|
|
||||||
<menuitem id="yuthon_salary_project_menu"
|
<menuitem id="yuthon_salary_project_menu"
|
||||||
name="项目"
|
name="项目"
|
||||||
parent="human_pay_slips_root_setting"
|
parent="human_pay_slips_root_setting"
|
||||||
@@ -521,6 +505,11 @@
|
|||||||
name="银行流水"
|
name="银行流水"
|
||||||
parent="yuthon_financial_management_menu"
|
parent="yuthon_financial_management_menu"
|
||||||
action="yuthon_property.view_property_bank_statements_action1"/>
|
action="yuthon_property.view_property_bank_statements_action1"/>
|
||||||
|
|
||||||
|
<menuitem id="human_pay_slips_root_setting"
|
||||||
|
name="配置"
|
||||||
|
parent="finance_root_board"
|
||||||
|
sequence="99"/>
|
||||||
<!--财务报表 -->
|
<!--财务报表 -->
|
||||||
<menuitem id="yuthon_property_process"
|
<menuitem id="yuthon_property_process"
|
||||||
sequence="90"
|
sequence="90"
|
||||||
|
|||||||
Reference in New Issue
Block a user