Files
gzth/yuthon_stock/models/yuthon_inventory_sheet.py
T
2026-07-03 19:05:50 +08:00

75 lines
2.2 KiB
Python

# -*- coding: utf-8 -*-
from odoo import api, fields, models
class YuthonInventorySheet(models.Model):
"""盘点表头:每次点击「确认生成盘点表」时创建一条,内含明细行"""
_name = 'yuthon.inventory.sheet'
_description = '盘点表'
_order = 'create_date desc, id desc'
# ========== 关联任务 ==========
task_id = fields.Many2one(
'yuthon.inventory.task',
string='所属盘点任务',
required=True,
ondelete='cascade',
)
# ========== 头记录信息 ==========
name = fields.Char(
string='盘点表名称',
compute='_compute_name',
store=True,
)
# ========== 明细行 ==========
line_ids = fields.One2many(
'yuthon.inventory.sheet.line',
'sheet_id',
string='盘点明细',
)
# 办公用品明细行(按 sheet_type 过滤)
office_line_ids = fields.One2many(
'yuthon.inventory.sheet.line',
'sheet_id',
string='办公用品明细',
domain=[('sheet_type', '=', 'office')],
)
# 固定资产明细行(按 sheet_type 过滤)
fixed_asset_line_ids = fields.One2many(
'yuthon.inventory.sheet.line',
'sheet_id',
string='固定资产明细',
domain=[('sheet_type', '=', 'fixed_asset')],
)
line_count = fields.Integer(
string='明细行数',
compute='_compute_line_count',
)
# ========== 状态 ==========
state = fields.Selection(
[('pending', '待盘点'), ('done', '已完成')],
string='状态',
default='pending',
readonly=True,
index=True,
)
# ========== 计算方法 ==========
@api.depends('task_id.code', 'task_id.name')
def _compute_name(self):
"""盘点表名称 = 任务编号 + 任务名"""
for sheet in self:
if sheet.task_id:
sheet.name = '%s - %s' % (sheet.task_id.code or '', sheet.task_id.name or '')
else:
sheet.name = ''
@api.depends('line_ids')
def _compute_line_count(self):
"""计算明细行数"""
for sheet in self:
sheet.line_count = len(sheet.line_ids)