shcool/yuthon_salary/models/salary_item.py
2026-07-30 19:56:44 +08:00

45 lines
1.7 KiB
Python

# -*- coding: utf-8 -*-
from odoo import models, fields, api
class SalaryItem(models.Model):
"""薪资项目 - 定义薪资单中的各个项目"""
_name = 'yuthon.salary.item'
_description = '薪资项目'
_order = 'sequence, id'
name = fields.Char(string='项目名称', required=True)
code = fields.Char(string='项目编码', required=True)
sequence = fields.Integer(string='排序', default=10)
category = fields.Selection([
('basic', '基本工资'),
('position', '岗位工资'),
('performance', '绩效工资'),
('class_hour', '课时费'),
('allowance', '津贴补贴'),
('deduction', '扣款项'),
('social', '社保公积金'),
('tax', '个人所得税'),
('other_income', '其他收入'),
('other_deduction', '其他扣款'),
], string='项目类别', required=True)
item_type = fields.Selection([
('income', '收入项'),
('deduction', '扣款项'),
], string='项目类型', required=True, default='income')
calculation_method = fields.Selection([
('fixed', '固定金额'),
('formula', '公式计算'),
('manual', '手动录入'),
], string='计算方式', required=True, default='fixed')
formula = fields.Text(string='计算公式')
is_taxable = fields.Boolean(string='是否计税', default=False)
is_social_base = fields.Boolean(string='是否社保基数', default=False)
is_required = fields.Boolean(string='必填项', default=False)
active = fields.Boolean(string='启用', default=True)
note = fields.Text(string='备注')
_sql_constraints = [
('code_uniq', 'unique(code)', '项目编码必须唯一!'),
]