From 7abb28adec7e6582dd91998001c1b604fd36688c Mon Sep 17 00:00:00 2001
From: zhou <123@>
Date: Wed, 14 May 2025 19:26:40 +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
---
yuthon_holiday/models/inherit_hr_leave.py | 8 ++--
yuthon_issue/models/issue_library.py | 32 ++++++++++++++++
yuthon_issue/views/issue_library_views.xml | 2 +
yuthon_salary/__manifest__.py | 2 +
yuthon_salary/models/__init__.py | 2 +
yuthon_salary/models/yuthon_salary_asset.py | 18 +++++++++
yuthon_salary/models/yuthon_salary_project.py | 38 +++++++++++++++++++
yuthon_salary/security/ir.model.access.csv | 4 +-
.../views/yuthon_salary_asset_views.xml | 27 +++++++++++++
.../views/yuthon_salary_project_views.xml | 21 ++++++++++
yuthon_work_brand/views/hr_menus.xml | 15 ++++++++
11 files changed, 165 insertions(+), 4 deletions(-)
create mode 100644 yuthon_salary/models/yuthon_salary_asset.py
create mode 100644 yuthon_salary/models/yuthon_salary_project.py
create mode 100644 yuthon_salary/views/yuthon_salary_asset_views.xml
create mode 100644 yuthon_salary/views/yuthon_salary_project_views.xml
diff --git a/yuthon_holiday/models/inherit_hr_leave.py b/yuthon_holiday/models/inherit_hr_leave.py
index 43da85e97..833c64d9e 100644
--- a/yuthon_holiday/models/inherit_hr_leave.py
+++ b/yuthon_holiday/models/inherit_hr_leave.py
@@ -442,14 +442,16 @@ class HolidaysRequestBatch(models.Model):
@api.depends('users_id')
def _compute_holiday_allowance(self):
+ number_of_days = 0
for record in self:
holiday_status_id = self.env['hr.leave.type'].search([('name', '=', '年假')])
- leave_id = self.env['hr.leave.allocation'].search([('employee_id', '=', record.users_id.employee_id.id),
+ leave_ids = self.env['hr.leave.allocation'].search([('employee_id', '=', record.users_id.employee_id.id),
('holiday_status_id', '=', holiday_status_id.id)])
employee = self.env['hr.employee'].search([('id', '=', record.users_id.employee_id.id)])
all_overtime_hours = round(employee.all_overtime_hours / 8, 1)
- if leave_id:
- number_of_days = int(leave_id.number_of_days)
+ if leave_ids:
+ for leave_id in leave_ids:
+ number_of_days += leave_id.number_of_days
else:
number_of_days = 0
record.holiday_allowance = (f"年假{number_of_days}天, 补休{all_overtime_hours}天")
diff --git a/yuthon_issue/models/issue_library.py b/yuthon_issue/models/issue_library.py
index 380a5b75b..79d2e6e73 100644
--- a/yuthon_issue/models/issue_library.py
+++ b/yuthon_issue/models/issue_library.py
@@ -49,6 +49,38 @@ class IssueLibrary(models.Model):
urgency_level = fields.Selection([('normal', '普件'), ('urgent', '急件'), ('emergency', '特急件')], string='紧急度',
default='normal')
work_end = fields.Boolean(string="结束")
+ member_of_department = fields.Boolean("是否是本部门数据", compute='_compute_part_of_department',
+ search='_search_part_of_department')
+
+ @api.depends_context('uid', 'company')
+ @api.depends('department_id')
+ def _compute_part_of_department(self):
+ user_employee = self._get_valid_employee_for_user()
+ active_department = user_employee.department_id
+ for employee in self:
+ employee.member_of_department = employee.department_id == active_department
+
+ def _get_valid_employee_for_user(self):
+ user = self.env.user
+ employee = user.employee_ids
+ if not employee:
+ user_employees = user.employee_id.sudo().search([
+ ('user_id', '=', user.id)
+ ])
+ employee = user_employees.filtered(lambda r: r.company_id == user.company_id) or user_employees[:1]
+ return employee
+
+ #
+ def _search_part_of_department(self, operator, value):
+ if operator not in ('=', '!=') or not isinstance(value, bool):
+ raise UserError(_('Operation not supported'))
+ user_employee = self._get_valid_employee_for_user()
+ # Double negation
+ if not value:
+ operator = '!=' if operator == '=' else '='
+ if not user_employee.department_id:
+ return [('id', operator, user_employee.id)]
+ return (['!'] if operator == '!=' else []) + [('department_id', '=', user_employee.department_id.id)]
def _get_default_name_title(self):
return self._description if self._description else self._name
diff --git a/yuthon_issue/views/issue_library_views.xml b/yuthon_issue/views/issue_library_views.xml
index 4d6ddf12a..5ecc02bd0 100644
--- a/yuthon_issue/views/issue_library_views.xml
+++ b/yuthon_issue/views/issue_library_views.xml
@@ -23,6 +23,7 @@
+
@@ -152,6 +153,7 @@
+
diff --git a/yuthon_salary/__manifest__.py b/yuthon_salary/__manifest__.py
index 577da7d14..3ce607f8e 100644
--- a/yuthon_salary/__manifest__.py
+++ b/yuthon_salary/__manifest__.py
@@ -20,6 +20,8 @@
'views/inherit_hr_payroll_structure_type_views.xml',
'views/yuthon_payroll_project_views.xml',
'views/yuthon_payroll_type_setting_views.xml',
+ 'views/yuthon_salary_asset_views.xml',
+ 'views/yuthon_salary_project_views.xml',
'views/yuthon_payroll_labor_views.xml',
'views/yuthon_salary_documents_views.xml',
'views/yuthon_payroll_retired_views.xml',
diff --git a/yuthon_salary/models/__init__.py b/yuthon_salary/models/__init__.py
index fee37fd4f..b336d872f 100644
--- a/yuthon_salary/models/__init__.py
+++ b/yuthon_salary/models/__init__.py
@@ -8,3 +8,5 @@ from . import yuthon_payroll_labor
from . import yuthon_payroll_retired
from . import yuthon_salary_documents
from . import yuthon_salary_year
+from . import yuthon_salary_project
+from . import yuthon_salary_asset
\ No newline at end of file
diff --git a/yuthon_salary/models/yuthon_salary_asset.py b/yuthon_salary/models/yuthon_salary_asset.py
new file mode 100644
index 000000000..d0c3928cd
--- /dev/null
+++ b/yuthon_salary/models/yuthon_salary_asset.py
@@ -0,0 +1,18 @@
+from odoo import api, fields, models, _
+import re
+
+
+class YuthonSalaryAsset(models.Model):
+ _name = 'yuthon.salary.asset'
+ _description = '管理费用、财务费用表'
+
+ project_id = fields.Many2one('yuthon.salary.project', string='项目')
+ budgeted_number = fields.Float(string='2024年预算数')
+ actual_number = fields.Float(string='2025年预算合计')
+ investment_companies = fields.Float(string='投资公司')
+ ttjt_company = fields.Float(string='天投城建')
+ wtwh_company = fields.Float(string='伟天文化')
+ gmgc_company = fields.Float(string='国晟公司')
+ ly_company = fields.Float(string='粮油公司')
+ wg_company = fields.Float(string='物管公司')
+ remake = fields.Char(string='备注')
diff --git a/yuthon_salary/models/yuthon_salary_project.py b/yuthon_salary/models/yuthon_salary_project.py
new file mode 100644
index 000000000..ce8bf8d51
--- /dev/null
+++ b/yuthon_salary/models/yuthon_salary_project.py
@@ -0,0 +1,38 @@
+from odoo import api, fields, models
+
+
+class YuthonSalaryProject(models.Model):
+ _name = 'yuthon.salary.project'
+ _description = '项目配置'
+ _order = 'ase_sequence asc'
+ _rec_name = 'name'
+
+ name = fields.Char(string="项目")
+ sequence = fields.Char(string='序号', store=True)
+ decision_type_id = fields.Many2one('issue.approval.decision.type', string='上级项目')
+
+ @api.onchange('sequence')
+ def onchange_name(self):
+ if self.sequence:
+ self.name = self.sequence + ' ' + str(self.name) if self.sequence else self.name
+
+ @api.onchange('sequence', 'decision_type_id')
+ def _onchange_department_code(self):
+ for code in self:
+ code.ase_sequence = int(code.sequence)
+ if code.sequence and code.decision_type_id:
+ code.sequence = code.decision_type_id.sequence + ('.' + code.sequence if code.sequence else '')
+ else:
+ code.sequence = code.sequence
+ code._update_child_sequences()
+
+ def _update_child_sequences(self):
+ def recursive_update(parent, parent_sequence):
+ for child in parent.child_ids:
+ new_sequence = parent_sequence + ('.' + child.sequence.split('.')[-1] if child.sequence else '')
+ self.env['issue.approval.decision.type'].search([('id', '=', child.id.origin)]).write(
+ {'sequence': new_sequence})
+ recursive_update(child, new_sequence)
+
+ recursive_update(self, self.sequence)
+
diff --git a/yuthon_salary/security/ir.model.access.csv b/yuthon_salary/security/ir.model.access.csv
index 93281ce7c..7da6a723d 100644
--- a/yuthon_salary/security/ir.model.access.csv
+++ b/yuthon_salary/security/ir.model.access.csv
@@ -25,4 +25,6 @@ access_payroll_labor_wizard,access_payroll_labor_wizard,model_payroll_labor_wiza
access_payroll_retired_wizard,access_payroll_retired_wizard,model_payroll_retired_wizard,base.group_user,1,1,1,1
access_yuthon_salary_documents,access_yuthon_salary_documents,model_yuthon_salary_documents,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
\ No newline at end of file
+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_asset, access_yuthon_salary_asset,model_yuthon_salary_asset,base.group_user,1,1,1,1
\ No newline at end of file
diff --git a/yuthon_salary/views/yuthon_salary_asset_views.xml b/yuthon_salary/views/yuthon_salary_asset_views.xml
new file mode 100644
index 000000000..9b96d30e0
--- /dev/null
+++ b/yuthon_salary/views/yuthon_salary_asset_views.xml
@@ -0,0 +1,27 @@
+
+
+
+ yuthon.salary.asset.tree
+ yuthon.salary.asset
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 管理费用、财务费用表
+ yuthon.salary.asset
+ tree
+
+
+
diff --git a/yuthon_salary/views/yuthon_salary_project_views.xml b/yuthon_salary/views/yuthon_salary_project_views.xml
new file mode 100644
index 000000000..b97feebf7
--- /dev/null
+++ b/yuthon_salary/views/yuthon_salary_project_views.xml
@@ -0,0 +1,21 @@
+
+
+
+ yuthon.salary.project.tree
+ yuthon.salary.project
+
+
+
+
+
+
+
+
+
+ 项目配置
+ yuthon.salary.project
+ tree
+
+
+
+
diff --git a/yuthon_work_brand/views/hr_menus.xml b/yuthon_work_brand/views/hr_menus.xml
index 4fc8ef777..467681a39 100644
--- a/yuthon_work_brand/views/hr_menus.xml
+++ b/yuthon_work_brand/views/hr_menus.xml
@@ -477,6 +477,21 @@
parent="finance_manage_employee_root_board"
action="yuthon_salary.action_view_hr_payslip_salary_release"
sequence="30"/>
+
+
+
+