From 71f4087c1e1d174b02a01e1bc58cfd91117d4343 Mon Sep 17 00:00:00 2001
From: zhou <123@>
Date: Thu, 3 Apr 2025 22:05:53 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
soong_workflow/models/soong_user_role.py | 6 +
.../views/soong_user_role_views.xml | 7 ++
yuthon_hr_attendance/models/hr_attendance.py | 21 ++++
.../hr_attendance_detail_wechat_views.xml | 2 +-
.../views/hr_attendance_views.xml | 1 +
.../models/yuthon_medical_manage.py | 12 ++
.../models/yuthon_medical_rule.py | 1 +
yuthon_hr_employee/security/company_rule.xml | 10 ++
.../views/yuthon_hr_employee_views.xml | 3 -
.../views/yuthon_medical_manage_views.xml | 6 +
.../views/yuthon_medical_rule_views.xml | 1 +
yuthon_hr_employee_approval/__manifest__.py | 1 +
.../models/__init__.py | 3 +-
.../models/property_reimbursement_form.py | 104 ++++++++++++++++++
.../security/ir.model.access.csv | 3 +
.../property_reimbursement_form_views.xml | 1 -
yuthon_property_approval/__manifest__.py | 1 -
yuthon_property_approval/models/__init__.py | 1 -
.../models/property_reimbursement_form.py | 93 +---------------
.../security/ir.model.access.csv | 3 -
.../models/yuthon_payroll_type_setting.py | 1 +
.../security/salary_security_rule.xml | 5 +
.../yuthon_payroll_type_setting_views.xml | 1 +
yuthon_work_brand/views/hr_menus.xml | 10 +-
24 files changed, 189 insertions(+), 108 deletions(-)
create mode 100644 yuthon_hr_employee_approval/models/property_reimbursement_form.py
rename {yuthon_property_approval => yuthon_hr_employee_approval}/views/property_reimbursement_form_views.xml (98%)
diff --git a/soong_workflow/models/soong_user_role.py b/soong_workflow/models/soong_user_role.py
index 6bae61132..056a12b9e 100644
--- a/soong_workflow/models/soong_user_role.py
+++ b/soong_workflow/models/soong_user_role.py
@@ -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:
diff --git a/soong_workflow/views/soong_user_role_views.xml b/soong_workflow/views/soong_user_role_views.xml
index 98653ef77..e019f21fd 100644
--- a/soong_workflow/views/soong_user_role_views.xml
+++ b/soong_workflow/views/soong_user_role_views.xml
@@ -7,6 +7,13 @@
code
action = model.f5_new()
+
+ 更新公司
+
+
+ code
+ action = model.f6_new()
+
同步花名册
diff --git a/yuthon_hr_attendance/models/hr_attendance.py b/yuthon_hr_attendance/models/hr_attendance.py
index 364891e78..ee2e8f852 100644
--- a/yuthon_hr_attendance/models/hr_attendance.py
+++ b/yuthon_hr_attendance/models/hr_attendance.py
@@ -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:
diff --git a/yuthon_hr_attendance/views/hr_attendance_detail_wechat_views.xml b/yuthon_hr_attendance/views/hr_attendance_detail_wechat_views.xml
index 8486de5a4..69c95d9b7 100644
--- a/yuthon_hr_attendance/views/hr_attendance_detail_wechat_views.xml
+++ b/yuthon_hr_attendance/views/hr_attendance_detail_wechat_views.xml
@@ -72,7 +72,7 @@
-
+
\ No newline at end of file
diff --git a/yuthon_hr_attendance/views/hr_attendance_views.xml b/yuthon_hr_attendance/views/hr_attendance_views.xml
index fae261570..91d737fc9 100644
--- a/yuthon_hr_attendance/views/hr_attendance_views.xml
+++ b/yuthon_hr_attendance/views/hr_attendance_views.xml
@@ -28,6 +28,7 @@
+
diff --git a/yuthon_hr_employee/models/yuthon_medical_manage.py b/yuthon_hr_employee/models/yuthon_medical_manage.py
index f9b957cbe..e083ac509 100644
--- a/yuthon_hr_employee/models/yuthon_medical_manage.py
+++ b/yuthon_hr_employee/models/yuthon_medical_manage.py
@@ -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 = '体检费明细'
diff --git a/yuthon_hr_employee/models/yuthon_medical_rule.py b/yuthon_hr_employee/models/yuthon_medical_rule.py
index 6a73bd8d2..ea9a5ebb2 100644
--- a/yuthon_hr_employee/models/yuthon_medical_rule.py
+++ b/yuthon_hr_employee/models/yuthon_medical_rule.py
@@ -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):
diff --git a/yuthon_hr_employee/security/company_rule.xml b/yuthon_hr_employee/security/company_rule.xml
index 07e46bd14..4fb6c070e 100644
--- a/yuthon_hr_employee/security/company_rule.xml
+++ b/yuthon_hr_employee/security/company_rule.xml
@@ -15,4 +15,14 @@
[('company_id', 'in', company_ids)]
+
+ 体检费管理多公司
+
+ [('company_id', 'in', company_ids)]
+
+
+ 体检费规则多公司
+
+ [('company_id', 'in', company_ids)]
+
\ No newline at end of file
diff --git a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
index bb31d5b2e..b02a067d2 100644
--- a/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
+++ b/yuthon_hr_employee/views/yuthon_hr_employee_views.xml
@@ -24,9 +24,6 @@
1
-
-
-
diff --git a/yuthon_hr_employee/views/yuthon_medical_manage_views.xml b/yuthon_hr_employee/views/yuthon_medical_manage_views.xml
index f4e7ec9b7..2957dd0fd 100644
--- a/yuthon_hr_employee/views/yuthon_medical_manage_views.xml
+++ b/yuthon_hr_employee/views/yuthon_medical_manage_views.xml
@@ -5,7 +5,13 @@
yuthon.medical.manage
+
+
+
+
diff --git a/yuthon_hr_employee/views/yuthon_medical_rule_views.xml b/yuthon_hr_employee/views/yuthon_medical_rule_views.xml
index 115e88890..819c93aad 100644
--- a/yuthon_hr_employee/views/yuthon_medical_rule_views.xml
+++ b/yuthon_hr_employee/views/yuthon_medical_rule_views.xml
@@ -14,6 +14,7 @@
+
diff --git a/yuthon_hr_employee_approval/__manifest__.py b/yuthon_hr_employee_approval/__manifest__.py
index 78d3a26c7..7be7f83e6 100644
--- a/yuthon_hr_employee_approval/__manifest__.py
+++ b/yuthon_hr_employee_approval/__manifest__.py
@@ -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',
diff --git a/yuthon_hr_employee_approval/models/__init__.py b/yuthon_hr_employee_approval/models/__init__.py
index c47bca161..b90af40a2 100644
--- a/yuthon_hr_employee_approval/models/__init__.py
+++ b/yuthon_hr_employee_approval/models/__init__.py
@@ -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
\ No newline at end of file
+from . import yuthon_retired_approval
+from . import property_reimbursement_form
\ No newline at end of file
diff --git a/yuthon_hr_employee_approval/models/property_reimbursement_form.py b/yuthon_hr_employee_approval/models/property_reimbursement_form.py
new file mode 100644
index 000000000..fd807ea3a
--- /dev/null
+++ b/yuthon_hr_employee_approval/models/property_reimbursement_form.py
@@ -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='加查费用')
diff --git a/yuthon_hr_employee_approval/security/ir.model.access.csv b/yuthon_hr_employee_approval/security/ir.model.access.csv
index 735635118..9086d0217 100644
--- a/yuthon_hr_employee_approval/security/ir.model.access.csv
+++ b/yuthon_hr_employee_approval/security/ir.model.access.csv
@@ -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
diff --git a/yuthon_property_approval/views/property_reimbursement_form_views.xml b/yuthon_hr_employee_approval/views/property_reimbursement_form_views.xml
similarity index 98%
rename from yuthon_property_approval/views/property_reimbursement_form_views.xml
rename to yuthon_hr_employee_approval/views/property_reimbursement_form_views.xml
index 452b4a4f4..a860639be 100644
--- a/yuthon_property_approval/views/property_reimbursement_form_views.xml
+++ b/yuthon_hr_employee_approval/views/property_reimbursement_form_views.xml
@@ -8,7 +8,6 @@
-
diff --git a/yuthon_property_approval/__manifest__.py b/yuthon_property_approval/__manifest__.py
index ea5942629..d06994b1c 100644
--- a/yuthon_property_approval/__manifest__.py
+++ b/yuthon_property_approval/__manifest__.py
@@ -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',
diff --git a/yuthon_property_approval/models/__init__.py b/yuthon_property_approval/models/__init__.py
index 5a0731dd0..997e4f41f 100644
--- a/yuthon_property_approval/models/__init__.py
+++ b/yuthon_property_approval/models/__init__.py
@@ -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
diff --git a/yuthon_property_approval/models/property_reimbursement_form.py b/yuthon_property_approval/models/property_reimbursement_form.py
index 3910571b0..8fdfd145a 100644
--- a/yuthon_property_approval/models/property_reimbursement_form.py
+++ b/yuthon_property_approval/models/property_reimbursement_form.py
@@ -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'
\ No newline at end of file
diff --git a/yuthon_property_approval/security/ir.model.access.csv b/yuthon_property_approval/security/ir.model.access.csv
index 697b033b8..2b0142db8 100644
--- a/yuthon_property_approval/security/ir.model.access.csv
+++ b/yuthon_property_approval/security/ir.model.access.csv
@@ -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
diff --git a/yuthon_salary/models/yuthon_payroll_type_setting.py b/yuthon_salary/models/yuthon_payroll_type_setting.py
index 67772a348..88a6ef843 100644
--- a/yuthon_salary/models/yuthon_payroll_type_setting.py
+++ b/yuthon_salary/models/yuthon_payroll_type_setting.py
@@ -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)
diff --git a/yuthon_salary/security/salary_security_rule.xml b/yuthon_salary/security/salary_security_rule.xml
index d3d4aa568..7acc1c1b7 100644
--- a/yuthon_salary/security/salary_security_rule.xml
+++ b/yuthon_salary/security/salary_security_rule.xml
@@ -30,4 +30,9 @@
[('company_id', 'in', company_ids)]
+
+ 职级类别多公司
+
+ [('company_id', 'in', company_ids)]
+
\ No newline at end of file
diff --git a/yuthon_salary/views/yuthon_payroll_type_setting_views.xml b/yuthon_salary/views/yuthon_payroll_type_setting_views.xml
index 7de283c97..f37dd2467 100644
--- a/yuthon_salary/views/yuthon_payroll_type_setting_views.xml
+++ b/yuthon_salary/views/yuthon_payroll_type_setting_views.xml
@@ -5,6 +5,7 @@
yuthon.payroll.type.setting
+
diff --git a/yuthon_work_brand/views/hr_menus.xml b/yuthon_work_brand/views/hr_menus.xml
index d823c2ff5..76163efb7 100644
--- a/yuthon_work_brand/views/hr_menus.xml
+++ b/yuthon_work_brand/views/hr_menus.xml
@@ -201,6 +201,11 @@
parent="hr_set_process_menu_root_board"
action="yuthon_hr_employee_approval.view_retired_approval_action"
sequence="20"/>
+
-