@@ -68,6 +68,12 @@ class YuthonUserRole(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):
|
||||
role_ids = self.env["soong.user.role"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
for role in role_ids:
|
||||
company_id = role.department_id.company_id
|
||||
role.sudo().write({'company_id': company_id.id if company_id else False})
|
||||
|
||||
def sync_new(self):
|
||||
job_ids = self.env["soong.user.role"].browse(self._context.get('active_ids', self._context.get('active_id')))
|
||||
for job in job_ids:
|
||||
|
||||
@@ -7,6 +7,13 @@
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = model.f5_new()</field>
|
||||
</record>
|
||||
<record id="all_soong_user_role_company" model="ir.actions.server">
|
||||
<field name="name">更新公司</field>
|
||||
<field name="model_id" ref="soong_workflow.model_soong_user_role"/>
|
||||
<field name="binding_model_id" ref="soong_workflow.model_soong_user_role"/>
|
||||
<field name="state">code</field>
|
||||
<field name="code">action = model.f6_new()</field>
|
||||
</record>
|
||||
<record id="sync_soong_user_role_user" model="ir.actions.server">
|
||||
<field name="name">同步花名册</field>
|
||||
<field name="model_id" ref="soong_workflow.model_soong_user_role"/>
|
||||
|
||||
@@ -123,6 +123,27 @@ class HrAttendance(models.Model):
|
||||
}
|
||||
}
|
||||
|
||||
def button_source(self):
|
||||
employee_id = self.employee_id.id
|
||||
current_date = self.current_data
|
||||
domain = [
|
||||
('employee_id', '=', employee_id),
|
||||
('checkin_time', '>=', fields.Datetime.to_string(datetime.combine(current_date, datetime.min.time()))),
|
||||
('checkin_time', '<', fields.Datetime.to_string(datetime.combine(current_date, datetime.max.time())))
|
||||
]
|
||||
attendance_records = self.env['hr.attendance.detail'].search(domain)
|
||||
if attendance_records:
|
||||
action = {
|
||||
'name': '考勤记录列表',
|
||||
'type': 'ir.actions.act_window',
|
||||
'res_model': 'hr.attendance.detail',
|
||||
'view_mode': 'tree',
|
||||
'domain': domain,
|
||||
}
|
||||
return action
|
||||
else:
|
||||
raise ValidationError("该员工当天没有考勤记录!")
|
||||
|
||||
def button_card_approval(self):
|
||||
form_id = self.env.ref('yuthon_hr_attendance.card_approval_form').id
|
||||
if self.is_approval:
|
||||
|
||||
@@ -72,7 +72,7 @@
|
||||
</record>
|
||||
|
||||
<menuitem id="menu_hr_attendance_attendances_view" name="考勤" parent="hr_attendance.menu_hr_attendance_root" sequence="20"/>
|
||||
<!-- <menuitem id="menu_hr_attendance_detail_view_attendances" name="打卡详情" parent="hr_attendance_root_board" sequence="90" action="hr_attendance_detail_action"/>-->
|
||||
<menuitem id="menu_hr_attendance_detail_view_attendances" name="打卡详情" parent="hr_attendance_root_board" sequence="90" action="hr_attendance_detail_action"/>
|
||||
<menuitem id="menu_hr_attendance_attendances_setting_view" name="考勤维护" parent="hr_attendance.menu_hr_attendance_root" sequence="30"/>
|
||||
|
||||
</odoo>
|
||||
@@ -28,6 +28,7 @@
|
||||
<button name="button_card_approval" type="object" string="补卡" class="oe_highlight" invisible="not (is_abnormal or is_early_card or is_late_card or absenteeism_card or is_no_card)"/>
|
||||
<button name="button_duty_approval" type="object" string="外出" class="oe_highlight" invisible="not (is_abnormal or is_early_card or is_late_card or absenteeism_card or is_no_card)"/>
|
||||
<button name="button_correct_approval" type="object" string="修正" class="oe_highlight" groups="yuthon_hr_attendance.group_he_attendance_planning_manager" invisible="is_approval"/>
|
||||
<button name="button_source" type="object" string="来源" class="oe_highlight"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
@@ -18,7 +18,10 @@ class YuthonMedicalManage(models.Model):
|
||||
prev_last_year_balance = fields.Float(string="前年结余")
|
||||
prev_last_year_used = fields.Float(string="前年使用")
|
||||
prev_last_year_remaining = fields.Float(string="前年剩余")
|
||||
this_year_usage = fields.Float(string='本年使用')
|
||||
this_year_quota = fields.Float(string='本年额度')
|
||||
medical_line_ids = fields.One2many('yuthon.medical.line', 'medical_manage_id', string="体检费明细")
|
||||
company_id = fields.Many2one("res.company", string="公司", default=lambda self: self.env.company)
|
||||
|
||||
def button_details(self):
|
||||
form_id = self.env.ref('yuthon_hr_employee.view_yuthon_medical_manage_form').id
|
||||
@@ -30,6 +33,15 @@ class YuthonMedicalManage(models.Model):
|
||||
"res_id": self.id,
|
||||
}
|
||||
|
||||
def property_reimbursement_form(self):
|
||||
form_id = self.env.ref('yuthon_hr_employee_approval.view_property_reimbursement_form_form').id
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": "报销单",
|
||||
"res_model": "property.reimbursement.form",
|
||||
"views": [[form_id, "form"]],
|
||||
}
|
||||
|
||||
class YuthonMedicalLine(models.Model):
|
||||
_name = 'yuthon.medical.line'
|
||||
_description = '体检费明细'
|
||||
|
||||
@@ -21,6 +21,7 @@ class YuthonMedicalRule(models.Model):
|
||||
start_date = fields.Date(string='开始时间')
|
||||
end_date = fields.Date(string='结束时间')
|
||||
is_enable = fields.Boolean(string="是否启用", default=False, compute='compute_is_enable', store=True)
|
||||
company_id = fields.Many2one("res.company", string="公司", default=lambda self: self.env.company)
|
||||
|
||||
@api.depends('start_date', 'end_date')
|
||||
def compute_is_enable(self):
|
||||
|
||||
@@ -15,4 +15,14 @@
|
||||
<field name="model_id" ref="model_yuthon_salary_group"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record model="ir.rule" id="yuthon_medical_manage_rule">
|
||||
<field name="name">体检费管理多公司</field>
|
||||
<field name="model_id" ref="model_yuthon_medical_manage"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record model="ir.rule" id="yuthon_medical_rule">
|
||||
<field name="name">体检费规则多公司</field>
|
||||
<field name="model_id" ref="model_yuthon_medical_rule"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -24,9 +24,6 @@
|
||||
<xpath expr="//field[@name='bank_account_id']" position="attributes">
|
||||
<attribute name="invisible">1</attribute>
|
||||
</xpath>
|
||||
<xpath expr="//field[@name='bank_account_id']" position="after">
|
||||
<field name="bank_account"/>
|
||||
</xpath>
|
||||
<xpath expr="//page[@name='personal_information']" position="replace">
|
||||
<page name="personal_information" string="个人隐私信息">
|
||||
<group>
|
||||
|
||||
@@ -5,7 +5,13 @@
|
||||
<field name="model">yuthon.medical.manage</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="体检费管理" editable="bottom">
|
||||
<header>
|
||||
<button name="property_reimbursement_form" string="提交体检费报销审批" type="object" class="oe_highlight"/>
|
||||
</header>
|
||||
<field name="employee_id"/>
|
||||
<field name="company_id" required="1" optional="show"/>
|
||||
<field name="this_year_usage"/>
|
||||
<field name="this_year_quota"/>
|
||||
<field name="current_year_remaining"/>
|
||||
<field name="last_year_quota"/>
|
||||
<field name="last_year_balance"/>
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
<field name="allowance_married_women"/>
|
||||
<field name="department_id"/>
|
||||
<field name="extension_years"/>
|
||||
<field name="company_id" required="1" optional="show"/>
|
||||
<field name="start_date"/>
|
||||
<field name="end_date"/>
|
||||
<field name="is_enable"/>
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
'views/yuthon_leaving_approval_views.xml',
|
||||
'views/yuthon_prepare_approval_views.xml',
|
||||
'views/yuthon_rank_approval_views.xml',
|
||||
'views/property_reimbursement_form_views.xml',
|
||||
'views/yuthon_reassignment_approval_views.xml',
|
||||
'views/yuthon_recruitment_approval_views.xml',
|
||||
'views/yuthon_regularization_approval_views.xml',
|
||||
|
||||
@@ -21,4 +21,5 @@ from . import yuthon_service_approval
|
||||
from . import yuthon_social_files_approval
|
||||
from . import yuthon_appointment_approval
|
||||
from . import yuthon_transfer_approval
|
||||
from . import yuthon_retired_approval
|
||||
from . import yuthon_retired_approval
|
||||
from . import property_reimbursement_form
|
||||
@@ -0,0 +1,104 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||||
|
||||
from odoo import models, fields, api, exceptions, _
|
||||
from odoo.exceptions import UserError, ValidationError
|
||||
|
||||
|
||||
class PropertyReimbursementForm(models.Model):
|
||||
_name = 'property.reimbursement.form'
|
||||
_inherit = ['soong.workflow.mixin', 'mail.thread.main.attachment', 'mail.activity.mixin']
|
||||
_description = '体检费报销单审批'
|
||||
|
||||
name = fields.Char(string='标题')
|
||||
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('property_reimbursement_form_code'))
|
||||
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
|
||||
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
|
||||
is_issues = fields.Boolean(string='是否上会')
|
||||
issues_result = fields.Html(string="会议结果")
|
||||
related_issues_id = fields.Many2one('issue.library', string="关联议题")
|
||||
reason_application = fields.Html(string="事由")
|
||||
documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
account_id = fields.Many2one('property.account.setting', string="账户")
|
||||
expense_line_ids = fields.One2many('property.expense.line', 'reimbursement_id', string="费用项目明细")
|
||||
physical_line_ids = fields.One2many('property.physical.line', 'reimbursement_id', string="体检费明细")
|
||||
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
|
||||
default='normal')
|
||||
active = fields.Boolean('Active', default=True, tracking=True)
|
||||
work_end = fields.Boolean(string="结束")
|
||||
|
||||
def _get_default_name_title(self):
|
||||
return self._description if self._description else self._name
|
||||
|
||||
name_title = fields.Char(default=_get_default_name_title)
|
||||
|
||||
def put_physical_in(self): # 导入按钮
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": "导入体检费明细",
|
||||
"res_model": "property.physical.wizard",
|
||||
"view_mode": "form",
|
||||
"target": "new",
|
||||
"context": {
|
||||
"default_reimbursement_id": self.id
|
||||
}
|
||||
}
|
||||
|
||||
# 体检费计算方法
|
||||
def compute_reimbursement(self):
|
||||
for record in self:
|
||||
for rec in record.physical_line_ids:
|
||||
rule_id = self.env['yuthon.medical.rule'].search([('department_id', '=', rec.employee_id.department_id.id)])
|
||||
employee_id = self.env['yuthon.medical.manage'].search([('employee_id', '=', rec.employee_id.id)])
|
||||
if not employee_id:
|
||||
years_passed = rec.employee_id.old - rule_id.starting_age
|
||||
decades_passed = years_passed // rule_id.increase_interval_years
|
||||
increased_amount = decades_passed * rule_id.increment_amount
|
||||
total_amount = rule_id.base_amount + increased_amount - rec.fees
|
||||
final_amount = min(total_amount, rule_id.cap)
|
||||
if rec.employee_id.user_sex == 'girl':
|
||||
if rec.employee_id.marital == 'single':
|
||||
final_amount = final_amount + rule_id.allowance_unmarried_women - rec.fees
|
||||
else:
|
||||
final_amount = final_amount + rule_id.allowance_married_women - rec.fees
|
||||
employee_id = self.env['yuthon.medical.manage'].create({
|
||||
'employee_id': rec.employee_id.id,
|
||||
'current_year_remaining': final_amount})
|
||||
else:
|
||||
final_amount = employee_id.current_year_remaining - rec.fees
|
||||
employee_id.write({'current_year_remaining': final_amount})
|
||||
self.env['yuthon.medical.line'].create({
|
||||
'medical_manage_id': employee_id.id,
|
||||
'medical_date': rec.reimbursement_date,
|
||||
'medical_fee': rec.fees})
|
||||
|
||||
class PropertyExpenseLine(models.Model):
|
||||
_name = 'property.expense.line'
|
||||
_description = '费用项目明细'
|
||||
|
||||
reimbursement_id = fields.Many2one('property.reimbursement.form', string='关联报销单')
|
||||
expense_id = fields.Many2one('property.project.setting', string='费用项目')
|
||||
invoice_type = fields.Selection([('ordinary_invoice', '普通发票'), ('vat_invoice', '增值税发票'), ('air_ticket', '机票'),
|
||||
('train_ticket', '火车票'), ('other_transport_ticket', '其他运输票'), ('other', '其他')], string='发票类型', default='ordinary_invoice')
|
||||
expense_amount = fields.Float(string='费用金额')
|
||||
applied_reimbursement_amount = fields.Float(string='申请报销金额')
|
||||
expense_department_id = fields.Many2one('hr.department', string='费用承担部门')
|
||||
invoice_receipt_number = fields.Char(string='收票单号')
|
||||
applied_payment_amount = fields.Float(string='申请付款金额')
|
||||
approved_reimbursement_amount = fields.Float(string='核定报销金额')
|
||||
approved_payment_amount = fields.Float(string='核定付款金额')
|
||||
|
||||
|
||||
class PropertyPhysicalLine(models.Model):
|
||||
_name = 'property.physical.line'
|
||||
_description = '体检费明细'
|
||||
|
||||
reimbursement_id = fields.Many2one('property.reimbursement.form', string='关联报销单')
|
||||
employee_id = fields.Many2one('hr.employee', string='姓名')
|
||||
department_id = fields.Many2one(related='employee_id.department_id', string="部门")
|
||||
sex = fields.Selection(related='employee_id.user_sex', string="性别")
|
||||
reimbursement_date = fields.Date(string='报销日期')
|
||||
fees = fields.Float(string='实收')
|
||||
package_grouping = fields.Char(string='套餐分组')
|
||||
package_fee = fields.Float(string='套餐费用')
|
||||
examination_fee = fields.Float(string='加查费用')
|
||||
@@ -8,6 +8,9 @@ access_yuthon_interview_approval,yuthon_interview_approval,model_yuthon_intervie
|
||||
access_yuthon_leaving_approval,yuthon_leaving_approval,model_yuthon_leaving_approval,base.group_user,1,1,1,1
|
||||
access_yuthon_prepare_approval,yuthon_prepare_approval,model_yuthon_prepare_approval,base.group_user,1,1,1,1
|
||||
access_yuthon_rank_approval,yuthon_rank_approval,model_yuthon_rank_approval,base.group_user,1,1,1,1
|
||||
access_property_reimbursement_form,property_reimbursement_form,model_property_reimbursement_form,base.group_user,1,1,1,1
|
||||
access_property_expense_line,property_expense_line,model_property_expense_line,base.group_user,1,1,1,1
|
||||
access_property_physical_line,property_physical_line,model_property_physical_line,base.group_user,1,1,1,1
|
||||
access_yuthon_reassignment_approval,yuthon_reassignment_approval,model_yuthon_reassignment_approval,base.group_user,1,1,1,1
|
||||
access_yuthon_recruitment_approval,yuthon_recruitment_approval,model_yuthon_recruitment_approval,base.group_user,1,1,1,1
|
||||
access_yuthon_regularization_approval,yuthon_regularization_approval,model_yuthon_regularization_approval,base.group_user,1,1,1,1
|
||||
|
||||
|
-1
@@ -8,7 +8,6 @@
|
||||
<field name="name"/>
|
||||
<field name="users_id"/>
|
||||
<field name="account_id"/>
|
||||
<field name="company_page"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
@@ -18,7 +18,6 @@
|
||||
'views/property_collection_confirm.xml',
|
||||
'views/property_early_quitting.xml',
|
||||
'views/property_eligibility.xml',
|
||||
'views/property_reimbursement_form_views.xml',
|
||||
'views/property_fitment.xml',
|
||||
'views/property_information.xml',
|
||||
'views/property_inventory_table.xml',
|
||||
|
||||
@@ -47,7 +47,6 @@ from . import property_construction_approval
|
||||
from . import property_project_approval
|
||||
from . import property_design_approval
|
||||
from . import property_supervising_approval
|
||||
from . import property_reimbursement_form
|
||||
from . import property_borrowing_approval
|
||||
from . import perperty_claim_approval
|
||||
from . import property_service_approval
|
||||
|
||||
@@ -7,99 +7,8 @@ from odoo.exceptions import UserError, ValidationError
|
||||
|
||||
class PropertyReimbursementForm(models.Model):
|
||||
_name = 'property.reimbursement.form'
|
||||
_inherit = ['mail.thread', 'mail.activity.mixin']
|
||||
_description = '体检费报销单审批'
|
||||
|
||||
name = fields.Char(string='标题')
|
||||
code = fields.Char(string="编号", default=lambda self: self.env['ir.sequence'].next_by_code('property_reimbursement_form_code'))
|
||||
users_id = fields.Many2one('res.users', string="申请人", default=lambda self: self.env.user.id)
|
||||
department_id = fields.Many2one(related='users_id.employee_id.department_id', string="部门")
|
||||
is_issues = fields.Boolean(string='是否上会')
|
||||
issues_result = fields.Html(string="会议结果")
|
||||
related_issues_id = fields.Many2one('issue.library', string="关联议题")
|
||||
reason_application = fields.Html(string="事由")
|
||||
documents_ids = fields.Many2many('ir.attachment', string="附件")
|
||||
company_page = fields.Selection([('tz', '天河投资'), ('wg', '天河物管'), ('lc', '天河粮储')], string="公司")
|
||||
account_id = fields.Many2one('property.account.setting', string="账户")
|
||||
expense_line_ids = fields.One2many('property.expense.line', 'reimbursement_id', string="费用项目明细")
|
||||
physical_line_ids = fields.One2many('property.physical.line', 'reimbursement_id', string="体检费明细")
|
||||
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
|
||||
default='normal')
|
||||
active = fields.Boolean('Active', default=True, tracking=True)
|
||||
work_end = fields.Boolean(string="结束")
|
||||
|
||||
def _get_default_name_title(self):
|
||||
return self._description if self._description else self._name
|
||||
|
||||
name_title = fields.Char(default=_get_default_name_title)
|
||||
|
||||
def put_physical_in(self): # 导入按钮
|
||||
return {
|
||||
"type": "ir.actions.act_window",
|
||||
"name": "导入体检费明细",
|
||||
"res_model": "property.physical.wizard",
|
||||
"view_mode": "form",
|
||||
"target": "new",
|
||||
"context": {
|
||||
"default_reimbursement_id": self.id
|
||||
}
|
||||
}
|
||||
|
||||
# 体检费计算方法
|
||||
def compute_reimbursement(self):
|
||||
for record in self:
|
||||
for rec in record.physical_line_ids:
|
||||
rule_id = self.env['yuthon.medical.rule'].search([('department_id', '=', rec.employee_id.department_id.id)])
|
||||
employee_id = self.env['yuthon.medical.manage'].search([('employee_id', '=', rec.employee_id.id)])
|
||||
if not employee_id:
|
||||
years_passed = rec.employee_id.old - rule_id.starting_age
|
||||
decades_passed = years_passed // rule_id.increase_interval_years
|
||||
increased_amount = decades_passed * rule_id.increment_amount
|
||||
total_amount = rule_id.base_amount + increased_amount - rec.fees
|
||||
final_amount = min(total_amount, rule_id.cap)
|
||||
if rec.employee_id.user_sex == 'girl':
|
||||
if rec.employee_id.marital == 'single':
|
||||
final_amount = final_amount + rule_id.allowance_unmarried_women - rec.fees
|
||||
else:
|
||||
final_amount = final_amount + rule_id.allowance_married_women - rec.fees
|
||||
employee_id = self.env['yuthon.medical.manage'].create({
|
||||
'employee_id': rec.employee_id.id,
|
||||
'current_year_remaining': final_amount})
|
||||
else:
|
||||
final_amount = employee_id.current_year_remaining - rec.fees
|
||||
employee_id.write({'current_year_remaining': final_amount})
|
||||
self.env['yuthon.medical.line'].create({
|
||||
'medical_manage_id': employee_id.id,
|
||||
'medical_date': rec.reimbursement_date,
|
||||
'medical_fee': rec.fees})
|
||||
|
||||
class PropertyExpenseLine(models.Model):
|
||||
_name = 'property.expense.line'
|
||||
_description = '费用项目明细'
|
||||
|
||||
reimbursement_id = fields.Many2one('property.reimbursement.form', string='关联报销单')
|
||||
expense_id = fields.Many2one('property.project.setting', string='费用项目')
|
||||
invoice_type = fields.Selection([('ordinary_invoice', '普通发票'), ('vat_invoice', '增值税发票'), ('air_ticket', '机票'),
|
||||
('train_ticket', '火车票'), ('other_transport_ticket', '其他运输票'), ('other', '其他')], string='发票类型', default='ordinary_invoice')
|
||||
expense_amount = fields.Float(string='费用金额')
|
||||
applied_reimbursement_amount = fields.Float(string='申请报销金额')
|
||||
expense_department_id = fields.Many2one('hr.department', string='费用承担部门')
|
||||
invoice_receipt_number = fields.Char(string='收票单号')
|
||||
applied_payment_amount = fields.Float(string='申请付款金额')
|
||||
approved_reimbursement_amount = fields.Float(string='核定报销金额')
|
||||
approved_payment_amount = fields.Float(string='核定付款金额')
|
||||
|
||||
|
||||
class PropertyPhysicalLine(models.Model):
|
||||
_name = 'property.physical.line'
|
||||
_description = '体检费明细'
|
||||
|
||||
reimbursement_id = fields.Many2one('property.reimbursement.form', string='关联报销单')
|
||||
employee_id = fields.Many2one('hr.employee', string='姓名')
|
||||
department_id = fields.Many2one(related='employee_id.department_id', string="部门")
|
||||
sex = fields.Selection(related='employee_id.user_sex', string="性别")
|
||||
reimbursement_date = fields.Date(string='报销日期')
|
||||
fees = fields.Float(string='实收')
|
||||
package_grouping = fields.Char(string='套餐分组')
|
||||
package_fee = fields.Float(string='套餐费用')
|
||||
examination_fee = fields.Float(string='加查费用')
|
||||
_name = 'property.physical.line'
|
||||
@@ -80,9 +80,6 @@ access_supervising_way_line,supervising.way.line,model_supervising_way_line,base
|
||||
access_property_contract_line,property_contract_line,model_property_contract_line,base.group_user,1,1,1,1
|
||||
access_choose_property_wizard,choose_property_wizard,model_choose_property_wizard,base.group_user,1,1,1,1
|
||||
access_property_rental_wizard,property_rental_wizard,model_property_rental_wizard,base.group_user,1,1,1,1
|
||||
access_property_reimbursement_form,property_reimbursement_form,model_property_reimbursement_form,base.group_user,1,1,1,1
|
||||
access_property_expense_line,property_expense_line,model_property_expense_line,base.group_user,1,1,1,1
|
||||
access_property_physical_line,property_physical_line,model_property_physical_line,base.group_user,1,1,1,1
|
||||
access_property_physical_wizard,property_physical_wizard,model_property_physical_wizard,base.group_user,1,1,1,1
|
||||
access_property_borrowing_approval,property_borrowing_approval,model_property_borrowing_approval,base.group_user,1,1,1,1
|
||||
access_yuthon_borrowing_line,yuthon_borrowing_line,model_yuthon_borrowing_line,base.group_user,1,1,1,1
|
||||
|
||||
|
@@ -7,6 +7,7 @@ class YuthonPayrollTypeSetting(models.Model):
|
||||
_description = '职级类别配置'
|
||||
|
||||
name = fields.Char(string='职级类别')
|
||||
sequence = fields.Char(string="序号", store=True)
|
||||
yuthon_company = fields.Selection([('thtz', 'thtz')], default="thtz")
|
||||
company_id = fields.Many2one('res.company', string='公司', default=lambda self: self.env.company)
|
||||
|
||||
|
||||
@@ -30,4 +30,9 @@
|
||||
<field name="model_id" ref="model_yuthon_payroll_retired"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
<record model="ir.rule" id="yuthon_payroll_type_setting_rule">
|
||||
<field name="name">职级类别多公司</field>
|
||||
<field name="model_id" ref="model_yuthon_payroll_type_setting"/>
|
||||
<field name="domain_force">[('company_id', 'in', company_ids)]</field>
|
||||
</record>
|
||||
</odoo>
|
||||
@@ -5,6 +5,7 @@
|
||||
<field name="model">yuthon.payroll.type.setting</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="职级类别配置" editable="bottom">
|
||||
<field name="sequence"/>
|
||||
<field name="name"/>
|
||||
<field name="company_id" required="1" optional="hide"/>
|
||||
</tree>
|
||||
|
||||
@@ -201,6 +201,11 @@
|
||||
parent="hr_set_process_menu_root_board"
|
||||
action="yuthon_hr_employee_approval.view_retired_approval_action"
|
||||
sequence="20"/>
|
||||
<menuitem id="property_reimbursement_form_menu"
|
||||
sequence="30"
|
||||
name="体检费报销单"
|
||||
parent="hr_set_process_menu_root_board"
|
||||
action="yuthon_hr_employee_approval.view_property_reimbursement_form_action"/>
|
||||
|
||||
<menuitem id="hr_setting_menu_root_board"
|
||||
name="配置"
|
||||
@@ -510,11 +515,6 @@
|
||||
name="违约金比例调整"
|
||||
parent="yuthon_property_process"
|
||||
action="yuthon_property_approval.property_penalty_proportion_action"/>
|
||||
<menuitem id="property_reimbursement_form_menu"
|
||||
sequence="19"
|
||||
name="体检费报销单"
|
||||
parent="yuthon_property_process"
|
||||
action="yuthon_property_approval.view_property_reimbursement_form_action"/>
|
||||
<menuitem id="property_claim_form_menu"
|
||||
sequence="20"
|
||||
name="业务报销单"
|
||||
|
||||
Reference in New Issue
Block a user