75 lines
2.2 KiB
Python
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)
|