从另一个 class 计算每个 sale.order 上的所有项目 - Odoo v8

Calculate all items on every sale.order from another class - Odoo v8

我需要计算 draft 州每个销售订单的所有 amount_total

我可以通过以下方式读取该域中的所有销售信息:

sale_order = fields.Many2one('sale.order', domain=[('state', '=', 'draft')], string="Sales Planned")
amount_total = fields.Float("Total Planned Sales", related="sale_order.amount_total")

但是这样的话,我一次只能搜索一个sale order,然后amount_total只显示我salected的sale order的总和。

那么,如何读取 draft 状态下的所有销售订单,并基于此计算所有 amount_total

_amount_all 功能,但我想它需要以某种方式覆盖。

编辑

这就是我的 class 现在的样子:

class account_budget_bsi_line(models.Model):
_name = 'account.budget.bsi.line'
_inherit = ['sale.order', 'stock.location', 'stock.move', 'purchase.order',]

@api.one
def _compute_sales_bsi(self):
    self.sales_bsi = self.env['sale.order'].search([('state', '=', 'draft')])

account_budget_bsi_id = fields.Many2one('account.budget.bsi', ondelete='cascade', select=True, required=True) 
opening_stock = fields.Float(string="Opening stock")
sale_order = fields.Many2one('sale.order', domain=[('state', '=', 'draft')], string="Sales Planned")
#amount_total = fields.Float("Total Planned Sales", related="sale_order.amount_total")
amount_total = fields.Float("Total Planned Sales", compute="_compute_amount_total")
sales_bsi =  fields.One2many('sale.order', compute="_compute_sales_bsi", string="Sales Test")
#sales_state = fields.Selection(related='sale_order.state', string="Sales Planned")
interauxiliary_transfers = fields.Many2one('stock.move', string="Interauxiliary transfers")
interauxiliary_receipts = fields.Many2one('stock.move', string="Interauxiliary receipts")
auxiliary_receipts = fields.Many2one('stock.move', string="Auxiliary receipts")
prod_purchased = fields.Many2one('stock.move', string="Products Purchased")
closing_stock = fields.Many2one('stock.move', string="Closing stock")

@api.multi
@api.depends('sale_order')
def _compute_amount_total(self):
    draft_orders = self.env['sale.order'].search([('state', '=', 'draft')])
    amount_total = sum(draft_orders.mapped('amount_total')
    for record in self:
        record.amount_total = amount_total

您没有提到要在其上创建这些字段的模型,所以我在这里猜测了一点。

你为什么不把 amount_total 变成 computed field

amount_total = fields.Float("Total Planned Sales", compute="_compute_amount_total")

@api.multi
@api.depends('fields_depended_on')
def _compute_amount_total(self):
    draft_orders = self.env['sale.order'].search([('state', '=', 'draft')])
    amount_total = sum(draft_orders.mapped('amount_total'))
    for record in self:
        record.amount_total = amount_total