将数量写入特定日志 - Odoo v8

Write quantities to specific journal - Odoo v8

我需要的是自动将一些数量写入特定的日记帐,读取它们并将它们写入借方或贷方字段,具体取决于情况。

但是,重点是,我需要这样做:

1.- 不创建发票

2.- 取决于 class/table

的状态

3.- 没有将函数添加到任何字段,所以一旦它改变状态,数量就会被写入日志。

我试过这个方法,但我认为这不起作用,因为它应该在 computed 浮点数或整数字段上:

@api.multi
@api.depends('order_picking', 'order_picking.isbn', 'contract_worksheet')
def accounting_scenarios(self):
    for record in self:
        if record.state == awaitingraw:
            record.isbn.printer_wip_account.debit = record.contract_worksheet.total_alles
        elif record.state == work_in_progress:
            record.transporter.transp_transit.debit = record.contract_worksheet.total_alles

所以,它基本上什么都不做。

我需要一种行为,例如,当购买或销售完成时,debitcredit 字段会更新为生成的发票。但在这种情况下,发票不是必需的,我只需要阅读并复制一些字段(计算或未计算),然后 "paste" 在所选期刊的上述字段上。

希望我已经解释清楚了。

有什么想法吗?

如果您需要在每次字段更改时执行一些操作,但您不需要创建一个调用计算方法的新字段(使用 @api.depends 装饰器),您应该覆盖 ORM write 字段所属模型的方法。所以,在你的情况下,我会做这样的事情:

@api.multi
def write(self, vals):
    res = super(YourModel, self).write(vals)
    if 'state' in vals:
        for record in self:
            contract_worksheet = record.contract_worksheet
            if record.state == awaitingraw:
                printer_wip_account = record.isbn.printer_wip_account
                res &= printer_wip_account.write({
                    'debit': sum(c.total_alles for c in contract_worksheet),
                })
            elif record.state == work_in_progress:
                transp_transit = record.transporter.transp_transit
                res &= transp_transit.write({
                    'debit': sum(c.total_alles for c in contract_worksheet),
                })
    return res

上面的代码可能不准确,因为我不知道你在那里使用的所有字段的类型,但是,你不能直接取One2many字段的值,你需要循环它以获得你想要的值。我假设字段 total_alles 是一个计算的 Float,并且每个 contract_worksheet 记录都有不同的值,因此您必须对它们求和以获得唯一的浮点数以写入 debit值。