@@ -104,6 +104,15 @@ class HrJob(models.Model):
|
||||
if department_id:
|
||||
job.sudo().write({'department_id': department_id.id if len(department_id) == 1 else department_id[0].id})
|
||||
|
||||
def f6_new(self):
|
||||
job_ids = self.env["hr.job"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
for job in job_ids:
|
||||
if job.department_id:
|
||||
company_id = job.department_id.company_id
|
||||
if company_id:
|
||||
job.sudo().write(
|
||||
{'company_id': company_id})
|
||||
|
||||
def write(self, vals):
|
||||
res = super(HrJob, self).write(vals)
|
||||
if 'job_personnel_ids' in vals:
|
||||
|
||||
@@ -5,6 +5,11 @@
|
||||
<field name="model_id" ref="model_hr_department"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record model="ir.rule" id="yuthon_job_rule">
|
||||
<field name="name">岗位多公司</field>
|
||||
<field name="model_id" ref="model_hr_job"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record model="ir.rule" id="yuthon_salary_group_rule">
|
||||
<field name="name">工资单分组多公司</field>
|
||||
<field name="model_id" ref="model_yuthon_salary_group"/>
|
||||
|
||||
@@ -7,7 +7,13 @@
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = model.f5_new()</field>
|
||||
</record>
|
||||
|
||||
<record id="all_hr_job_company_user" model="ir.actions.server">
|
||||
<field name="name">同步公司</field>
|
||||
<field name="model_id" ref="hr.model_hr_job"/>
|
||||
<field name="binding_model_id" ref="hr.model_hr_job"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = model.f6_new()</field>
|
||||
</record>
|
||||
<record id="hr_job_inherit" model="ir.ui.view">
|
||||
<field name="name">hr.job.inherit</field>
|
||||
<field name="model">hr.job</field>
|
||||
|
||||
@@ -9,6 +9,8 @@ class InheritHrPayslip(models.Model):
|
||||
employee_id = fields.Many2one('hr.employee', string="姓名")
|
||||
base_salary = fields.Float(string='基本工资', compute='_compute_salary', store=True)
|
||||
bank_account = fields.Char(string='银行账号', related='employee_id.bank_account', store=True)
|
||||
tax_payable = fields.Float(string='应补(退)税额', store=True)
|
||||
actual_salary = fields.Float(string='实发工资', store=True, compute='_compute_actual_salary')
|
||||
identification_id = fields.Char(string='证件号码', related='employee_id.identification_id', store=True)
|
||||
card_type = fields.Char(string='证件类型', store=True, default="居民身份证")
|
||||
salary_group_id = fields.Many2one('yuthon.salary.group', string="工资组", store=True, index=True)
|
||||
@@ -75,6 +77,7 @@ class InheritHrPayslip(models.Model):
|
||||
performance_deduction = fields.Float(string='扣发绩效奖金', compute='_compute_deduction', store=True)
|
||||
commuting_deduction = fields.Float(string='扣发通信补贴', compute='_compute_deduction', store=True)
|
||||
base_salary_deduction = fields.Float(string='扣发基本工资', compute='_compute_deduction', store=True)
|
||||
specialized_deduction = fields.Float(string='累计专项扣除')
|
||||
|
||||
def action_refresh_from_work_entries(self):
|
||||
if any(p.state not in ['draft', 'verify'] for p in self):
|
||||
@@ -219,6 +222,25 @@ class InheritHrPayslip(models.Model):
|
||||
record.base_salary_deduction
|
||||
)
|
||||
|
||||
@api.depends('total_before_tax', 'basic_endowment_insurance', 'basic_medical_insurance',
|
||||
'unemployment_insurance', 'housing_provident_fund', 'b_year', 'tax_payable',
|
||||
'union_dues', 'meal_misunderstanding_fee', 'temporary_performance_bonus',
|
||||
'reimburse_performance_bonus', 'life_salary')
|
||||
def _compute_actual_salary(self):
|
||||
for record in self:
|
||||
record.actual_salary = (record.total_before_tax -
|
||||
record.basic_endowment_insurance -
|
||||
record.basic_medical_insurance -
|
||||
record.unemployment_insurance -
|
||||
record.housing_provident_fund -
|
||||
record.b_year -
|
||||
record.tax_payable -
|
||||
record.union_dues -
|
||||
record.meal_misunderstanding_fee -
|
||||
record.temporary_performance_bonus -
|
||||
record.reimburse_performance_bonus -
|
||||
record.life_salary)
|
||||
|
||||
def put_button(self):
|
||||
for record in self:
|
||||
record.write({'is_push': True})
|
||||
|
||||
Binary file not shown.
@@ -92,7 +92,7 @@
|
||||
<field name="name">职级</field>
|
||||
<field name="res_model">hr.payroll.structure</field>
|
||||
<field name="view_mode">tree,form,search</field>
|
||||
<field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>
|
||||
<!-- <field name="context">{'group_by_no_leaf':1,'group_by':[]}</field>-->
|
||||
</record>
|
||||
<record id="all_paroll_write_salary" model="ir.actions.server">
|
||||
<field name="name">批量更新职级类型</field>
|
||||
|
||||
@@ -24,36 +24,46 @@
|
||||
<xpath expr="//field[@name='number']" position="attributes">
|
||||
<attribute name="column_invisible">1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='company_id']" position="attributes">
|
||||
<attribute name="optional">hide</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='net_wage']" position="after">
|
||||
<field name="struct_id" string="职级"/>
|
||||
<field name="struct_id" string="职级"/>
|
||||
<field name="bank_account"/>
|
||||
<field name="actual_salary" decoration-danger="1"/>
|
||||
<field name="base_salary"/>
|
||||
<field name="rank_salary"/>
|
||||
<field name="post_salary"/>
|
||||
<field name="performance_bonuses"/>
|
||||
<field name="commuting_allowance"/>
|
||||
<field name="seniority_salary"/>
|
||||
<field name="overtime_pay"/>
|
||||
<field name="full_attendance_award"/>
|
||||
<field name="performance_deduction"/>
|
||||
<field name="commuting_deduction"/>
|
||||
<field name="base_salary_deduction"/>
|
||||
<field name="assessment_reserved_amount"/>
|
||||
<field name="study_on"/>
|
||||
<field name="jing_te"/>
|
||||
<field name="overtime_pay"/>
|
||||
<field name="high_temperature_allowance"/>
|
||||
<field name="total_before_tax"/>
|
||||
<field name="basic_medical_insurance"/>
|
||||
<field name="temporary_performance_bonus"/>
|
||||
<field name="year_compute" decoration-danger="1"/>
|
||||
<field name="year_jie" decoration-danger="1"/>
|
||||
<field name="jing_te" decoration-danger="1"/>
|
||||
<field name="year_gong" decoration-danger="1"/>
|
||||
<field name="study_on" decoration-danger="1"/>
|
||||
<field name="base_salary_deduction" decoration-success="1"/>
|
||||
<field name="commuting_deduction" decoration-success="1"/>
|
||||
<field name="performance_deduction" decoration-success="1"/>
|
||||
<field name="total_before_tax" decoration-danger="1" decoration-bf="1"/>
|
||||
<field name="basic_endowment_insurance"/>
|
||||
<field name="basic_medical_insurance"/>
|
||||
<field name="unemployment_insurance"/>
|
||||
<field name="tax"/>
|
||||
<field name="housing_provident_fund"/>
|
||||
<field name="year_compute"/>
|
||||
<field name="year_jie"/>
|
||||
<field name="year_gong"/>
|
||||
<field name="reimburse_performance_bonus"/>
|
||||
<field name="b_year"/>
|
||||
<field name="union_dues"/>
|
||||
<field name="based_pay"/>
|
||||
<field name="tax_payable" decoration-danger="1" decoration-bf="1"/>
|
||||
<field name="deduction_standard"/>
|
||||
<field name="specialized_deduction"/>
|
||||
<field name="child_education"/>
|
||||
<field name="elderly_support"/>
|
||||
<field name="housing_loan_interest"/>
|
||||
<field name="housing_rent"/>
|
||||
<field name="continuing_education"/>
|
||||
<field name="infant_care"/>
|
||||
<field name="meal_misunderstanding_fee"/>
|
||||
<field name="is_salary_push" column_invisible="1"/>
|
||||
</xpath>
|
||||
@@ -162,7 +172,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree string="薪资计算" default_order="employee_id" js_class="custom_salary_button" editable="bottom">
|
||||
<field name="employee_id" string="姓名"/>
|
||||
<field name="total_before_tax" decoration-danger="1"/>
|
||||
<field name="total_before_tax" decoration-danger="1" decoration-bf="1"/>
|
||||
<field name="company_id" optional="hide" required="1"/>
|
||||
<field name="base_salary"/>
|
||||
<field name="rank_salary"/>
|
||||
@@ -202,6 +212,7 @@
|
||||
<field name="arch" type="xml">
|
||||
<tree string="个税计算" default_order="employee_id" js_class="custom_salary_payslip_button">
|
||||
<field name="employee_id" string="姓名"/>
|
||||
<field name="tax_payable" decoration-danger="1" decoration-bf="1"/>
|
||||
<field name="struct_id" string="职级"/>
|
||||
<field name="post_salary"/>
|
||||
<field name="card_type"/>
|
||||
@@ -262,22 +273,15 @@
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<record id="inherit_view_hr_payslip_tree" model="ir.ui.view">
|
||||
<field name="name">inherit.view.hr.payslip.tree</field>
|
||||
<field name="model">hr.payslip</field>
|
||||
<field name="inherit_id" ref="hr_payroll.view_hr_payslip_tree"/>
|
||||
<field name="arch" type="xml">
|
||||
<xpath expr="//field[@name='employee_id']" position="attributes">
|
||||
<field name="bank_account"/>
|
||||
</xpath>
|
||||
</field>
|
||||
</record>
|
||||
<record id="hr_payroll.action_view_hr_payslip_month_form" model="ir.actions.act_window">
|
||||
<field name="name">薪资审定</field>
|
||||
<field name="res_model">hr.payslip</field>
|
||||
<field name="view_mode">tree,form,search</field>
|
||||
<field name="domain">[('is_salary_push', '=', True)]</field>
|
||||
<field name="context">{'search_default_group_by_employee': 1}</field>
|
||||
<field name="view_ids" eval="[(5, 0, 0),
|
||||
(0, 0, {'view_mode': 'tree', 'view_id': ref('hr_payroll.view_hr_payslip_tree')}),
|
||||
(0, 0, {'view_mode': 'form', 'view_id': ref('hr_payroll.view_hr_payslip_form')})]"/>
|
||||
</record>
|
||||
<record id="action_view_hr_payslip_month_form1" model="ir.actions.act_window">
|
||||
<field name="name">薪资计算</field>
|
||||
|
||||
@@ -10,6 +10,7 @@ from datetime import datetime
|
||||
|
||||
class SalaryPayslipWizard(models.Model):
|
||||
_name = 'salary.payslip.wizard'
|
||||
_description = '个税计算导入'
|
||||
|
||||
excel_file = fields.Binary(string="上传Excel表")
|
||||
excel_name = fields.Char(string="文件名")
|
||||
|
||||
Reference in New Issue
Block a user