From 1adb2d14a7fe5f9d62a8a99b1155dfd6488cb458 Mon Sep 17 00:00:00 2001 From: zhou <123@> Date: Mon, 31 Mar 2025 16:18:04 +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_salary/__manifest__.py | 4 ++ yuthon_salary/models/__init__.py | 4 +- yuthon_salary/models/yuthon_payroll_labor.py | 37 ++++++++++++++++ .../models/yuthon_payroll_retired.py | 33 ++++++++++++++ yuthon_salary/security/ir.model.access.csv | 6 ++- .../views/yuthon_payroll_labor_views.xml | 44 +++++++++++++++++++ .../views/yuthon_payroll_retired_views.xml | 41 +++++++++++++++++ yuthon_salary/wizard/__init__.py | 4 +- yuthon_salary/wizard/payroll_labor_wizard.py | 25 +++++++++++ .../wizard/payroll_labor_wizard_views.xml | 35 +++++++++++++++ .../wizard/payroll_retired_wizard.py | 26 +++++++++++ .../wizard/payroll_retired_wizard_views.xml | 36 +++++++++++++++ yuthon_salary/wizard/salary_compute_wizard.py | 6 ++- yuthon_work_brand/views/hr_menus.xml | 10 +++++ 14 files changed, 307 insertions(+), 4 deletions(-) create mode 100644 yuthon_salary/models/yuthon_payroll_labor.py create mode 100644 yuthon_salary/models/yuthon_payroll_retired.py create mode 100644 yuthon_salary/views/yuthon_payroll_labor_views.xml create mode 100644 yuthon_salary/views/yuthon_payroll_retired_views.xml create mode 100644 yuthon_salary/wizard/payroll_labor_wizard.py create mode 100644 yuthon_salary/wizard/payroll_labor_wizard_views.xml create mode 100644 yuthon_salary/wizard/payroll_retired_wizard.py create mode 100644 yuthon_salary/wizard/payroll_retired_wizard_views.xml diff --git a/yuthon_salary/__manifest__.py b/yuthon_salary/__manifest__.py index 1e99eec65..83a05254c 100644 --- a/yuthon_salary/__manifest__.py +++ b/yuthon_salary/__manifest__.py @@ -20,9 +20,13 @@ 'views/yuthon_payroll_project_views.xml', 'views/yuthon_payroll_board_views.xml', 'views/yuthon_payroll_type_setting_views.xml', + 'views/yuthon_payroll_labor_views.xml', + 'views/yuthon_payroll_retired_views.xml', 'wizard/yuthon_salary_wizard_views.xml', 'wizard/temporary_payslip_wizard_views.xml', 'wizard/yuthon_payroll_wizard_views.xml', + 'wizard/payroll_labor_wizard_views.xml', + 'wizard/payroll_retired_wizard_views.xml', 'wizard/salary_compute_wizard_views.xml', 'wizard/salary_payslip_wizard_views.xml', 'wizard/select_delete_wizard_viwes.xml', diff --git a/yuthon_salary/models/__init__.py b/yuthon_salary/models/__init__.py index 4fac03273..334304fe1 100644 --- a/yuthon_salary/models/__init__.py +++ b/yuthon_salary/models/__init__.py @@ -4,4 +4,6 @@ from . import inherit_hr_payroll_structure_type from . import inherit_hr_payslip from . import yuthon_payroll_type_setting from . import yuthon_payroll_project -from . import yuthon_payroll_board \ No newline at end of file +from . import yuthon_payroll_board +from . import yuthon_payroll_labor +from . import yuthon_payroll_retired \ No newline at end of file diff --git a/yuthon_salary/models/yuthon_payroll_labor.py b/yuthon_salary/models/yuthon_payroll_labor.py new file mode 100644 index 000000000..6b0b78c55 --- /dev/null +++ b/yuthon_salary/models/yuthon_payroll_labor.py @@ -0,0 +1,37 @@ +from odoo import api, fields, models + + +class YuthonPayrollLabor(models.Model): + _name = 'yuthon.payroll.labor' + _description = '劳务费' + + employee_id = fields.Many2one('hr.employee', string='姓名') + 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="月份") + labor_amount = fields.Float(string='金额') + + + def action_payroll_labor_wizard(self): + return { + "type": "ir.actions.act_window", + "name": "劳务费导入", + "res_model": "payroll.labor.wizard", + "view_mode": "form", + "target": "new", + } + + + diff --git a/yuthon_salary/models/yuthon_payroll_retired.py b/yuthon_salary/models/yuthon_payroll_retired.py new file mode 100644 index 000000000..e86637ba1 --- /dev/null +++ b/yuthon_salary/models/yuthon_payroll_retired.py @@ -0,0 +1,33 @@ +from odoo import api, fields, models + + +class YuthonPayrollRetired(models.Model): + _name = 'yuthon.payroll.retired' + _description = '退休人员费用' + + name = fields.Char(string='姓名') + 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="月份") + retired_amount = fields.Float(string='金额') + + def action_payroll_retired_wizard(self): + return { + "type": "ir.actions.act_window", + "name": "退休人员费用", + "res_model": "payroll.retired.wizard", + "view_mode": "form", + "target": "new", + } \ No newline at end of file diff --git a/yuthon_salary/security/ir.model.access.csv b/yuthon_salary/security/ir.model.access.csv index 3c0a7f79c..06c6ad5c9 100644 --- a/yuthon_salary/security/ir.model.access.csv +++ b/yuthon_salary/security/ir.model.access.csv @@ -14,4 +14,8 @@ access_return_wizard,access_return_wizard,model_return_wizard,base.group_user,1, access_return_salary_wizard, access_return_salary_wizard,model_return_salary_wizard,base.group_user,1,1,1,1 access_put_salary_wizard,access_put_salary_wizard,model_put_salary_wizard,base.group_user,1,1,1,1 access_yuthon_payroll_board,access_yuthon_payroll_board,model_yuthon_payroll_board,base.group_user,1,1,1,1 -access_temporary_payslip_wizard,access_temporary_payslip_wizard,model_temporary_payslip_wizard,base.group_user,1,1,1,1 \ No newline at end of file +access_temporary_payslip_wizard,access_temporary_payslip_wizard,model_temporary_payslip_wizard,base.group_user,1,1,1,1 +access_yuthon_payroll_labor,access_yuthon_payroll_labor,model_yuthon_payroll_labor,base.group_user,1,1,1,1 +access_yuthon_payroll_retired,access_yuthon_payroll_retired,model_yuthon_payroll_retired,base.group_user,1,1,1,1 +access_payroll_labor_wizard,access_payroll_labor_wizard,model_payroll_labor_wizard,base.group_user,1,1,1,1 +access_payroll_retired_wizard,access_payroll_retired_wizard,model_payroll_retired_wizard,base.group_user,1,1,1,1 \ No newline at end of file diff --git a/yuthon_salary/views/yuthon_payroll_labor_views.xml b/yuthon_salary/views/yuthon_payroll_labor_views.xml new file mode 100644 index 000000000..3fc6e63ca --- /dev/null +++ b/yuthon_salary/views/yuthon_payroll_labor_views.xml @@ -0,0 +1,44 @@ + + + + yuthon.payroll.labor.tree + yuthon.payroll.labor + + + + + + + + + + + yuthon.payroll.labor.search + yuthon.payroll.labor + + + + + + + + + + + + 劳务费 + yuthon.payroll.labor + tree,form + + + 导入劳务费用 + + + code + action = model.action_payroll_labor_wizard() + + + + + + diff --git a/yuthon_salary/views/yuthon_payroll_retired_views.xml b/yuthon_salary/views/yuthon_payroll_retired_views.xml new file mode 100644 index 000000000..70608ee24 --- /dev/null +++ b/yuthon_salary/views/yuthon_payroll_retired_views.xml @@ -0,0 +1,41 @@ + + + + yuthon.payroll.retired.tree + yuthon.payroll.retired + + + + + + + + + + + yuthon.payroll.retired.search + yuthon.payroll.retired + + + + + + + + + + + + 退休人员费用 + yuthon.payroll.retired + tree,form + + + 导入退休人员费用 + + + code + action = model.action_payroll_retired_wizard() + + + diff --git a/yuthon_salary/wizard/__init__.py b/yuthon_salary/wizard/__init__.py index 1705e7ca2..4ee17002f 100644 --- a/yuthon_salary/wizard/__init__.py +++ b/yuthon_salary/wizard/__init__.py @@ -4,4 +4,6 @@ from . import salary_compute_wizard from . import salary_payslip_wizard from . import select_delete_wizard from . import put_return_wizard -from . import temporary_payslip_wizard \ No newline at end of file +from . import temporary_payslip_wizard +from . import payroll_labor_wizard +from . import payroll_retired_wizard \ No newline at end of file diff --git a/yuthon_salary/wizard/payroll_labor_wizard.py b/yuthon_salary/wizard/payroll_labor_wizard.py new file mode 100644 index 000000000..6682bce98 --- /dev/null +++ b/yuthon_salary/wizard/payroll_labor_wizard.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api, _, SUPERUSER_ID +from odoo.exceptions import ValidationError, UserError +from pypinyin import pinyin, Style +import xlrd +import base64 +import datetime +from datetime import datetime + + +class PayrollLaborWizard(models.Model): + _name = 'payroll.labor.wizard' + _description = '劳务费导入弹窗' + + excel_file = fields.Binary(string="上传Excel表") + excel_name = fields.Char(string="文件名") + + def confirm(self): + if not self.excel_file: + raise ValidationError('请上传文件。') + book = xlrd.open_workbook(file_contents=base64.decodebytes(self.excel_file)) + sh = book.sheet_by_index(0) + for rx in range(1, sh.nrows): + row = sh.row(rx) + self.yuthon_payroll_data(row) diff --git a/yuthon_salary/wizard/payroll_labor_wizard_views.xml b/yuthon_salary/wizard/payroll_labor_wizard_views.xml new file mode 100644 index 000000000..05af76c04 --- /dev/null +++ b/yuthon_salary/wizard/payroll_labor_wizard_views.xml @@ -0,0 +1,35 @@ + + + + 劳务费 + self + . + + + + 审批意见弹窗 + payroll.labor.wizard + +
+ +
+
+ + + + + + + + +
+ +
+
+
+
\ No newline at end of file diff --git a/yuthon_salary/wizard/payroll_retired_wizard.py b/yuthon_salary/wizard/payroll_retired_wizard.py new file mode 100644 index 000000000..2c2c980f1 --- /dev/null +++ b/yuthon_salary/wizard/payroll_retired_wizard.py @@ -0,0 +1,26 @@ +# -*- coding: utf-8 -*- +from odoo import models, fields, api, _, SUPERUSER_ID +from odoo.exceptions import ValidationError, UserError +from pypinyin import pinyin, Style +import xlrd +import base64 +import datetime +from datetime import datetime + + +class PayrollLaborWizard(models.Model): + _name = 'payroll.retired.wizard' + _description = '退休人员费用导入弹窗' + + excel_file = fields.Binary(string="上传Excel表") + excel_name = fields.Char(string="文件名") + + def confirm(self): + if not self.excel_file: + raise ValidationError('请上传文件。') + book = xlrd.open_workbook(file_contents=base64.decodebytes(self.excel_file)) + sh = book.sheet_by_index(0) + for rx in range(1, sh.nrows): + row = sh.row(rx) + self.yuthon_payroll_data(row) + diff --git a/yuthon_salary/wizard/payroll_retired_wizard_views.xml b/yuthon_salary/wizard/payroll_retired_wizard_views.xml new file mode 100644 index 000000000..cbe2817fa --- /dev/null +++ b/yuthon_salary/wizard/payroll_retired_wizard_views.xml @@ -0,0 +1,36 @@ + + + + 退休人员导入模板 + self + . + + + + 审批意见弹窗 + payroll.retired.wizard + +
+ +
+
+ + + + + + + + +
+ +
+
+
+
+ diff --git a/yuthon_salary/wizard/salary_compute_wizard.py b/yuthon_salary/wizard/salary_compute_wizard.py index 5c1e8a46c..0007b5e75 100644 --- a/yuthon_salary/wizard/salary_compute_wizard.py +++ b/yuthon_salary/wizard/salary_compute_wizard.py @@ -32,7 +32,11 @@ class SalaryComputeWizard(models.Model): @api.onchange('yuthon_company') def onchange_yuthon_company(self): if self.yuthon_company: - employees = self.env['hr.employee'].search([('yuthon_company', '=', self.yuthon_company),('is_salary', '=', True)]) + employees = self.env['hr.employee'].search([ + ('yuthon_company', '=', self.yuthon_company), + ('is_salary', '=', True), + ('use_user_type', '!=', 'labor') + ]) self.employee_ids = [(6, 0, employees.ids)] self.employee_number = len(self.employee_ids) diff --git a/yuthon_work_brand/views/hr_menus.xml b/yuthon_work_brand/views/hr_menus.xml index c446c2706..0bb3868e4 100644 --- a/yuthon_work_brand/views/hr_menus.xml +++ b/yuthon_work_brand/views/hr_menus.xml @@ -330,6 +330,16 @@ parent="human_resources_salary_root_board" action="yuthon_salary.action_view_hr_payslip_month_form2" sequence="3"/> + +