将数量写入特定期刊 - Odoo v8

时间:2017-11-29 04:56:19

标签: python python-2.7 odoo-8 odoo

我需要的是自动将一些数量写入特定期刊,阅读并在借方或贷方字段中写入,具体取决于具体情况。

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

1.-不创建发票

2.-取决于班级/表格的状态

3.-如果不将函数添加到任何字段,那么只要它改变状态,就会将数量写入日记。

我尝试过这种方法,但我认为这不起作用,因为它应该在computed Float或Integer字段上:

@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 fieds会根据生成的发票进行更新。但在这种情况下,发票是没有必要的,我只需要阅读,并复制一些字段(计算与否),然后在所选期刊的上述字段中“粘贴”。

我希望我已经解释过了。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

如果您需要在每次字段更改时执行某些操作,但您不需要创建调用计算方法(使用@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值。